c语言的排序函数有多少种 c语言排序总结

C语言排序算法一共多少种选择排序
#include iostream
using namespace std;
void select_sort(int arr[], int num);
void output_array(int arr[], int num);
int main()
{
int a[10];
for(int i=0; i10; i++)
{
cina[i];
}
select_sort(a,10);
output_array(a,10);
return 0;
}
void select_sort(int array[],int n) //形参array是数组名
{
int i,j,k,t;
for(i=0; in-1; i++)
{
k=i;//先设第i个就为最小
for(j=i+1; jn; j++)
if(array[j]array[k])
k=j;//通过循环,得到k为最小
t=array[k];//交换a[i]和a[k]
array[k]=array[i];
array[i]=t;
}
return;
}
void output_array(int arr[], int num)
{
int i;
for(i=0; inum; i++)
{
coutarr[i];
coutendl;
}
return;
}
2.冒泡排序
#includestdio.h
int main()
{
int i,j,a[10],t;
for(i=0;i10;i++)
scanf("%d",a[i]);
for(i=0;i10;i++)
for(j=i+1;j10;j++)
if(a[i]a[j])
{
t=a[j];
a[j]=a[i];
a[i]=t;
}
for(i=0;i10;i++)
printf("%d ",a[i]);
return 0;
}
3.堆排序
#includeiostream
using namespace std;
voidpaidui(int a[20],int i,int m)
{
int k,t;
t=a[i];
k=2*i+1;
while (km)
{
if ((km-1)(a[k]a[k+1]))
k++;
if (ta[k])
{
a[i]=a[k];
i=k;
k=2*i+1;
}
else break;
}
a[i]=t;
}
void duipai(int a[20], int n)
{
int i,k;
for (i=n/2-1;i=0;i--)
paidui(a,i,n);
for (i=n-1; i=1; i--)
{
k=a[0];
a[0]=a[i];
a[i]=k;
paidui(a,0,i);
}}
int main()
{
int a[10],i;
for(i=0;i10;i++)
cina[i];
duipai(a,10);
for(i=0;i10;i++)
couta[i]endl;
}
4.快速排序
#includeiostream
using namespace std;
void Quicksort(int a[],int low,int high)
{
if(low=high)
{
return;
}
int first=low;
int last=high;
int key=a[first];
while(firstlast)
{
while(firstlasta[last]=key)
--last;
a[first]=a[last];
while(firstlasta[first]=key)
++first;
a[last]=a[first];
}
a[first]=key;
Quicksort(a,low,first-1);
Quicksort(a,last+1,high);
}
int main()
{
int i,a[100],x,n=0;
while(cinx)
{
a[n]=x;
n++;
}
n--;
Quicksort(a,0,n);
for(i=0;i=n;i++)
couta[i]" ";
coutendl;
return 0;
}
5. 基数排序
#include stdio.h
#include stdlib.h
int main(){
int data[10]={73,22,93,43,55,14,82,65,39,81};//对十个数进行排序
int temp[10][10]={0};//构造一个临时二维数组,其值为0
int order[10]={0};//构造一维数组,其值为0
int i,j,k,n,lsd;
k=0;n=1;
for (i=0;i10;i++) printf("%d ",data[i]);//在排序前,对这10个数打印一遍
putchar('\n');
while (n=10){
for (i=0;i10;i++){
lsd=((data[i]/n)%10);//lsd先对个位取余,然后再对十位取余,注意循环
temp[lsd][order[lsd]]=data[i];//temp[3][0]=73,temp[2][0]=22,temp[3][1]=93,temp[3][2]=43,??
order[lsd]++;//需要区分的是lsd和order[lsd],这两个不是一样的概念嗷
}
printf("\n重新排列: ");
for (i=0;i10;i++){
if(order[i]!=0)
for (j=0;jorder[i];j++){
data[k]=temp[i][j];
printf("%d ",data[k]);
k++;
}
order[i]=0;
}
n*=10; //第二次用十位
k=0;
}
putchar('\n');
printf("\n排序后: ");
for (i=0;i10;i++) printf("%d ",data[i]);
return 0;
}
6.希尔排序
#includeiostream

推荐阅读