排序之交换排序

 

交换排序:比较两个待排的值,如果出现逆序就交换。

 

冒泡排序:

第一趟:

       1、  首先比较第1个和第2个,如果逆序就交换

       2、  然后比较低2个和第3个,如果逆序就交换

       3、  一直到第n-1和第n个比较完毕

         这样第一趟就比较完毕,最大的数就沉到最后。

重复上述过程直到所有的排序完毕。

对应代码来看一下

void BubbleSort(List R,int n)
{
         intI,j,temp,endsort;
         for(i=1;i<=n-1;i++)    //i表示的是比较的第几趟
         {
                   endsort=0;
                   for(j=1;j<=n-i-1;j++)
                   {
                            if(R[j].key>R[j+1].key)      //前一个和后一个比较
                            {
                                     temp=R[j+1];
                                     R[j+1]=R[j];
                                     R[j]=temp;
                                     endsort=1;       //表示是否做过交互
                            }
                   }
                   if(endsort==0) break;      //endsort==0说明没有做过交互,表明所有的序列已经排好
         }
}


快速排序:

快速排序用代码来实现用到了递归,我们对应的来看一下代码

首先是快速排序的方法,每一趟都是这样的

intQuickPartition (List R,int low, int high)
{        //low表示待排序列中的低位,如上图的i
         //high表示待排序列中的高位,如上图的j
         x=Row[low];     //记录下基准
         while(low<high)       
         {
                   while(low<high &&R[high].key>x.key) high--;//当高位的值大于基准自减,接着比较
                           
                   R[low]=R[high]; //当小于基准的时候,就将高位的值直接赋给low表示的低位
                   while(low<high &&R[low].key<x.key) low++; //当低位的值小于基准自加,接着比较
                   R[high]=R[low]; //当大于于基准的时候,就将低位的值直接赋给high表示的高位位
         }
         R[low]=x;          //当low=high的时候将记录下来的基准赋给该位置
         return low;       //返回的是当前low=high的位置
}
 
voidQuickSot(List R,int low, int high)
{
         if(low<high)
         {
                   temp= QuickPartition(R,low,high);记录下来返回的位置
                   QuickSort(R,low,temp-1);//接着调用自身,排的序是temp-1之前的,左递归
                   QuickSort(R,temp+1,high);//排的是temp+1之后的,右递归
         }
}


 

小结

       不论是冒泡排序还是快速排序,都是那两个数进行比较,如果逆序就交换,然后进行下一组的比较,直到整个序列排完。

评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值