冒泡排序
基本思想:
每次比较相邻元素,如果他们的顺序错误就把他们交换过来;
#include
快速排序
基本思想:
从数列中挑出一个元素,称为基准,重新排列数组,所有比基准值小的元素摆放在基准值前面,所有比基准值大的放在基准值后面(相同的数可以放到任意一边)。
#include<stdio.h>
#define N 10
int p[101];
void quick_sort(int left,int right);
int main()
{
int i,j;
printf("please enter ten numbers:n");
for(i=1;i<=N;i++)
{
scanf("%d",&p[i]);
}
quick_sort(1,N);
printf("The correct order isn");
for(i=1;i<=N;i++)
{
printf("%d ",p[i]);
}
return 0;
}
void quick_sort(int left,int right)
{
int i,j,t,temp;
if(left>right)
return;
temp=p[left];
i=left;
j=right;
while(i!=j)
{
while(i<j && p[j]>=temp)
j--;
while(i<j && p[i]<=temp)
i++;
if(i<j)
{
t=p[i];
p[i]=p[j];
p[j]=t;
}
}
p[left]=p[i];
p[i]=temp;
quick_sort(left,i-1);
quick_sort(j+1,right);
}
选择排序
基本思想:
每一次从待排序的数据元素选出最大(或最小)的一个元素,存放到序列的起始位置,直到全部待排序的数据元素排完。
#include<stdio.h>
#define N 10
int main()
{
int p[N];
int i,j,t;
printf("please enter ten numbers:n");
for(i=0;i<N;i++)
{
scanf("%d",&p[i]);
}
for(i=0;i<N;i++)
{
for(j=i+1;j<N;j++)
{
if(p[i]>p[j])
{
t=p[i];
p[i]=p[j];
p[j]=t;
}
}
}
printf("The correct order is:n");
for(i=0;i<N;i++)
{
printf("%d ",p[i]);
}
return 0;
}
桶排序
基本思想:
将数组的元素分布到多个桶中,然后每个桶单独排序。
#include<stdio.h>
#define N 10
int main()
{
int p[21];
int i,t,j;
for(i=0;i<21;i++)
{
p[i]=0;
}
printf("please enter ten numbers:n");
for(i=0;i<N;i++)
{
scanf("%d",&t);
p[t]++;
}
printf("The correct order is:n");
for(i=0;i<21;i++)
{
for(j=1;j<=p[i];j++)
{
printf("%d ",i);
}
}
return 0;
}