您的位置:首页 > 其它

排序问题(不断总结,不断更新)

2013-06-13 15:39 288 查看
 
     
          排序问题

  冒泡排序:

冒泡排序的思想:每次将相邻的两个数比较,将小的放到前面(或大的放到前面)。若有6个数,9,8,5,4,2,0。第一次,9,8比较,将9,8对调;第二次,将第二个数与第三个数比较即9,5比较,将9,5对调;第三次,将9,4比较······(如下图所示)




所以循环只需要控制循环几次,和每一次循环交换的次数就行了。

循环的次数是n-1次,然后每次循环的次数就是n-i次,然后排列就行。

冒泡的思路就是:起泡或者说是沉底的思想。沉底就是每一次循环都将最大或者最小的数放到最下面,不断循环,直到结束。
 

代码:

for(i = 0 ; i < n-1; i ++)

for(j = 0;j < n-i;j++)

{

if(a[j]>a[j+1])              //将最大的数字沉底,按照从小到大的顺序排列。                 

swap(a[j],a[j+1]);

}
 
 
 
 

选择排序
 

选择排序的思想:所谓选择法就是将n个数中的最小数与a[0]对换;再将a[1]~a
中的,最小数与a[1]对换,依次往下循环,……每比较一轮,找出未经排序的最小的一个数。共比较N-1轮。

 以5个数为例,说明一下:

a[0]   a[1]   a[2]   a[3]    a[4]

 3     6     1      9      4      未排序时的情况

 1     6     3      9      4      将余下的4个数中最小的数3与a[1]交换

 1     3     6      9      4      将余下的3个数中最小的数4与a[2]交换

 1     3     4      9      6      将余下的2个数中的最小数6与a[3]交换

 1     3     4      6      9      至此完成排序

 

 

void sort(int array[],int n)

{

   
 int i,j,k;

   
 for(i = 0;i < n-1; i ++)             //比较n-1次

 
   {

 
     
 
 k = i;

     
   
 for(j = i+1; j < n; j ++)          //从第i+1个数字开始往下比较

 
     
  {

     
     
     
if(array[j]<array[j+1])

 
     
     
    k=j;

 
     
     
   swap(a[k],a[i]);

 
     
  }

 
   }

}
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: