快速排序

来源:互联网 发布:paxos算法 应用 编辑:程序博客网 时间:2024/05/01 08:52

基本思想:通过一趟排序将待排记录分割成独立的两部分,其中的一部分记录的关键字均比另一部分记录的关键字小

                  再分别对这两部分记录继续进行排序,以达到整个序列有序。

#include <stdio.h>void QuickSort(int *a,int low,int high); int FindPos(int *a,int low,int high); int main(void){int a[6]={-2,1,0,5,4,3}; QuickSort(a,0,5); //第二个参数表示第一个元素的下标 第三个参数表示最后一个元素的下标for (int i=0;i<6;++i)printf("%d ",a[i]);printf("\n"); return 0;}void QuickSort(int *a,int low,int high) //查找一定成功,不返回值 {int pos;if (low<high){pos = FindPos(a,low,high); //找到数组a中从low开始到hign结束的第一个元素的位置QuickSort(a,low,pos-1); //左边一半继续这样排 QuickSort(a,pos+1,high); //右边一半继续这样排 } }  int FindPos(int *a,int low,int high)     //一趟排序后找到分界点(书上为此种写法) {int val = a[low];while(low<high){while(low<high && a[high]>=val)    --high;a[low]=a[high];while(low<high && a[low]<=val)    ++low;a[high]=a[low];}  //终止while循环后,low和high的值相等 a[low]=val;return low;//low可以改为 high }

看到还有一些快排的写法,总弄不对,就记着这个吧。忘了的时候看看书就通啦!






0 0
原创粉丝点击