您的位置:首页 > 其它

排序之交换排序

2015-10-14 16:26 274 查看
 


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

 

冒泡排序:



第一趟:

       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之后的,右递归
}
}


 
小结
       不论是冒泡排序还是快速排序,都是那两个数进行比较,如果逆序就交换,然后进行下一组的比较,直到整个序列排完。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  排序 交换