排序之交换排序
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之后的,右递归 } }
小结
不论是冒泡排序还是快速排序,都是那两个数进行比较,如果逆序就交换,然后进行下一组的比较,直到整个序列排完。
相关文章推荐