几个简单的排序方法

一个学期的学习后掌握一下三种排序方法

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);  

 

posted @ 2017-01-13 17:03  汪神  阅读(490)  评论(0编辑  收藏  举报