排序之快速排序
一,
复杂度:O(n log n)
基本思想:通过一趟排序讲待排序记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
#include <stdio.h> int Partition(int *a, int low, int high) { int pivotkey = a[low]; //注意左右分别对应传入的low high while(low<high) { while(low<high && a[high]>=pivotkey)//中枢要比右边的小 --high; a[low]=a[high];//发现一个比中枢小的,移到左边 while(low<high && a[low]<=pivotkey)//中枢要比左边的大 ++low; a[high]=a[low];//发现一个比中枢大的,移到右边 } a[low]=pivotkey;//现在high = low,将中枢移到中间 return low; } void QSort(int *a, int low, int high) { if(low<high) { int pivotloc = Partition(a, low, high); QSort(a, low, pivotloc-1); QSort(a, pivotloc+1, high); } } //输出内容 void print_content(int *a, int size) { for(int i=0;i<size;i++) { printf("%d\t",a[i]); } printf("\n"); } int main(void) { int a[]={0,7,8,9,3,4,5,1,2,6,11,10,13,12}; QSort(a,0,sizeof(a)/sizeof(a[0]));//40/4 print_content(a,sizeof(a)/sizeof(a[0])); return 0; }
http://www.cnblogs.com/chenbin7/archive/2011/10/02/2197940.html
快速排序 #include <iostream> using namespace std; //元素交换 void swap(int &a,int &b) { int temp=a; a=b; b=temp; } /*/////////////////////////////////////////////// 快速排序 */ int Partition(int *a,int p,int r) { int i = p-1; int j = p; for(j=p;j<r;j++) { if(a[j]<a[r]) { i++; swap(a[i],a[j]); } } swap(a[i+1],a[r]); return i+1; } void QuickSort(int *a,int p,int r) { if(p<r) { int q = Partition(a,p,r); QuickSort(a,p,q-1); QuickSort(a,q+1,r); } } ///////////////////////////////////////////////// int main() { int n,i,a[20]; cout<<"请输入数组元素n:"<<endl; cin>>n; cout<<"请输入"<<n<<"个元素:"<<endl; for(i=0;i<n;i++) cin>>a[i]; QuickSort(a,0,n-1); for(i=0;i<n;i++) cout<<a[i]<<" "; cout<<endl; return 0; }