几个简单的排序方法
一个学期的学习后掌握一下三种排序方法
1.冒泡:
设有n个数要排列:有数组a[x]
int i,j,temp;
for(j=0;j<n-1;j++) //一共比较n-1趟
for(i=0;i<n-1-j;i++) //每一趟比较那么多次
if(a[i]>a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
冒泡的一种更好理解的写法:
/*总的来说还是一样,这里要进行n-1趟排序,但这种可以更好地用冒泡的思想去理解,每趟比较的任务,就是让j号元素称为最大的那个元素,就是一趟比较过后,要让j号元素之前的最大的那个元素“冒”上来。因此j自然一开始就等于n-1(最后那个元素嘛)*/ for(j = n-1; j >0 ; j --) { /*这里就是每一趟里面的比较操作了,你就想着,每一次都要从头开始一直比,比到j号元素,就是要求最大元素冒出来的位置就行,然后就自然i一开始=0,小于j*/ for(i = 0; i < j; i ++) { if(a[i]>a[i+1]) { temp = a[i]; a[i] = a[i+1]; a[i+1] = temp; } } }
2.选择法:有数组a[x],设有n个数要排列
int i,j,k,temp;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(a[j]<a[k])k=j;
if(k!=i)
{
temp=a[i];
a[i]=a[k];
a[k]=temp;
}
}
3.桶排序: 设排5个10以内的数先
int a[11]={0},i,j,t;//先使a全为0
for(i=0;i<5;i++)
{
scanf("%d",&t);
a[t]++;
}
for(i=0;i<11;i++) //依次判断a[0]~a[10]
for(j=1;j<=a[i];j++) //出现了几次就打印几次
printf("%d ",i);