求一个用c语言编写的最简单的排序算法

[复制链接]
查看11 | 回复10 | 2021-1-27 06:56:28 | 显示全部楼层 |阅读模式
随便是什么排序算法,只要是程序简单些就行了,谢谢!!
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:56:28 | 显示全部楼层

1./*
2.*算法名称:冒泡排序
3.*算法思想:通过比较相邻两元素的值,把较大者后移,经过N-1次相邻两元素比较,把最大值“沉”到最后。
4.*通过N-1次循环,把N-1个大值“沉”到后面。则数组有序。
5.*/
6.
7.#include
8.//forusingsrand()andrand()
9.#include
10.#include
11.
12.#defineELEMENT_NUMBER10//待排序元素个数
13.
14.voidinit_array(int*array);//用随机函数来初始化数组
15.voidshow_array(int*array);//打印数组的值
16.voidbubble_sort(intarray[]);//冒泡排序
17.
18.intmain(void)
19.{
20.intarray[ELEMENT_NUMBER];
21.
22.init_array(array);
23.printf("Thearrayhasbeeninitialedasfollowing:\n");
24.show_array(array);
25.
26.bubble_sort(array);
27.printf("Aftersortedbybubble_sort:\n");
28.show_array(array);
29.return0;
30.}//main()
31.
32.

33.voidinit_array(int*array)//用随机函数来初始化数组
34.{
35.inti;
36.srand(time(NULL));
37.for(i=0;iarray[j+1])
69.{
70.array[j]^=array[j+1];
71.array[j+1]^=array[j];
72.array[j]^=array[j+1];
73.}//if
74.}//inner_for
75.}//for
76.}//bubble_sort()

回复

使用道具 举报

千问 | 2021-1-27 06:56:28 | 显示全部楼层
#/*
#*这个是通过小泡往前冒来进行排序.
#*/
#voidbubble_sort(int*array)
#{
#inti,j;
#
#for(i=0;ii;j--)
#{
#if(array[j]
回复

使用道具 举报

千问 | 2021-1-27 06:56:28 | 显示全部楼层
堆排序
#include
#include
#include
usingnamespacestd;
int*pData=0;
intcnt;
voidrestore(inti,intj)//i,j从1开始索引
{
intk=i;
intt;
while(k*2pData[idx-1])idx=k*2+1;
if(pData[idx-1]>pData[k-1])
{
t=pData[k-1];
pData[k-1]=pData[idx-1];
pData[idx-1]=t;
k=idx;
}
elsebreak;
}
}
voidbuild()
{
inti;
for(i=cnt/2;i>=1;i--)
{
restore(i,cnt);
}
}
voidsort()
{
inti;
intt;
t=pData[cnt-1];
pData[cnt-1]=pData[0];
pData[0]=t;
for(i=cnt-1;i>1;i--)
{
restore(1,i);
t=pData[i-1];
pData[i-1]=pData[0];
pData[0]=t;
}
}
voidoutput()
{
inti;
for(i=0;i>cnt;
pData=newint[cnt];
inti;
for(i=0;i>pData;
}
fin.close();
/*
cnt=100000;
pData=newint[cnt];
inti;
for(i=0;i
回复

使用道具 举报

千问 | 2021-1-27 06:56:28 | 显示全部楼层
#/*
#3.*算法思想:跟玩扑克牌时自己整理牌的思想是一样的.
#4.*首先,只有一张牌,可看做是已有序了.
#5.*然后,每进来一张牌(第N张牌),就需要在前面已有序的(N-1)张
#6.*牌进行扫描,找到自己应该插入的位置.然后插入.
#7.*/
#8.
#
#9.//input:arraynameandthelengthofthearray.
#10.//output:void.
#11.voidinsert_sort(intarray[],intn)
#12.{
#13.inti;//iistheindexofgoingtobesortednumber.
#14.intj;//jistheindexofsortednumbers.
#15.intkey;//thekeynumberwhichisgoingtobesorted.
#16.//外循环从1开始.array[0]默认是已有序了.只需要把后面的n-1个数进行排序即可
#
#1.for(i=1;i=0&&key
回复

使用道具 举报

千问 | 2021-1-27 06:56:28 | 显示全部楼层
既然是随便什么排序都行..就搞最好学的.最简单的几个吧...堆排.快排.基排.LZ可以去网上搜下.很多介绍它们...
回复

使用道具 举报

千问 | 2021-1-27 06:56:28 | 显示全部楼层
好像ELEMENT_NUMBER没有定义,是吗?
引用2楼jznhljg的回复:C/C++code#/*
#*这个是通过小泡往前冒来进行排序.
#*/
#voidbubble_sort(int*array)
#{
#inti,j;
#
#for(i=0;ii;j--)
#{
#if(array[j]
回复

使用道具 举报

千问 | 2021-1-27 06:56:28 | 显示全部楼层
散分的?写个插入派序吧。
#include
#include
#include
voidinsert_swap(int*ele,intn)
{
inti,j,sem,var;
for(i=1;i=*(ele+j-1))
{
sem++;
//printf("nofindingstopsem\n");
}
}
}
/*for(i=0;i

回复

使用道具 举报

千问 | 2021-1-27 06:56:28 | 显示全部楼层
usingSystem;
namespaceBubbleSorter
{
publicclassBubbleSorter
{
publicvoidSort(int[]list)
{
inti,j,temp;
booldone=false;
j=1;
while((j<list.Length)&&(!done))
{
done=true;
for(i=0;i<list.Length-j;i++)
{
if(list>list[i+1])
{
done=false;
temp=list
list=list[i+1];
list[i+1]=temp;
}
}
j++;
}
}
}
publicclassMainClass
{publicstaticvoidMain()
{
int[]iArrary=newint[]{1,5,13,6,10,55,99,2,87,12,34,75,33,47};
BubbleSortersh=newBubbleSorter();
sh.Sort(iArrary);
for(intm=0;m<iArrary.Length;m++)
Console.Write("{0}",iArrary[m]);
Console.WriteLine();
}}
}


选择排序
usingSystem;

namespaceSelectionSorter
{publicclassSelectionSorter
{privateintmin;
publicvoidSort(int[]list)
{for(inti=0;i<list.Length-1;i++)
{min=i;
for(intj=i+1;j<list.Length;j++)
{if(list[j]<list[min])
min=j;
}
intt=list[min];
list[min]=list
list=t;
}}
}
publicclassMainClass
{publicstaticvoidMain()
{
int[]iArrary=newint[]{1,5,3,6,10,55,9,2,87,12,34,75,33,47};
SelectionSorterss=newSelectionSorter();
ss.Sort(iArrary);
for(intm=0;m<iArrary.Length;m++)
Console.Write("{0}",iArrary[m]);
Console.WriteLine();
}}
}


插入排序
usingSystem;
namespaceInsertionSorter
{publicclassInsertionSorter
{publicvoidSort(int[]list)
{for(inti=1;i<list.Length;i++)
{intt=list
intj=i;
while((j>0)&&(list[j-1]>t))
{list[j]=list[j-1];
--j;
}
list[j]=t;}
}
}
publicclassMainClass
{publicstaticvoidMain()
{
int[]iArrary=newint[]{1,13,3,6,10,55,98,2,87,12,34,75,33,47};
InsertionSorterii=newInsertionSorter();
ii.Sort(iArrary);
for(intm=0;m<iArrary.Length;m++)
Console.Write("{0}",iArrary[m]);
Console.WriteLine();
}}
}


希尔排序
 希尔排序是将组分段,进行插入排序.
usingSystem;
namespaceShellSorter
{
publicclassShellSorter
{
publicvoidSort(int[]list)
{
intinc;
for(inc=1;inc<=list.Length/9;inc=3*inc+1);
for(;inc>0;inc/=3)
{
for(inti=inc+1;i<=list.Length;i+=inc)
{
intt=list[i-1];
intj=i;
while((j>inc)&&(list[j-inc-1]>t))
{
list[j-1]=list[j-inc-1];
j-=inc;
}
list[j-1]=t;
}}
}}
publicclassMainClass
{publicstaticvoidMain()
{
int[]iArrary=newint[]{1,5,13,6,10,55,99,2,87,12,34,75,33,47};
ShellSortersh=newShellSorter();
sh.Sort(iArrary);
for(intm=0;m<iArrary.Length;m++)
Console.Write("{0}",iArrary[m]);
Console.WriteLine();
}}
}

回复

使用道具 举报

千问 | 2021-1-27 06:56:28 | 显示全部楼层
我偷个懒,使用系统自己的排序算法,理论上比一般程序员写的都要健壮和高效。
功能实现:qsort函数,位于头文件stdlib.h中。
#include
#include
intvalues[]={40,10,100,90,20,25};
intcompare(constvoid*a,constvoid*b)
{
return(*(int*)b-*(int*)a);//此处决定是从大到小,还是从小到大
}
intmain(intargc,char*argv[])
{
intn;
qsort(values,6,sizeof(int),compare);
for(n=0;n
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行