快速排序
2014-12-17 01:25
169 查看
#include<stdio.h> #include<algorithm> using namespace std; void InsertionSort(int a[],int N) { int j,p,tmp; for(p=1;p<N;p++) { //1-N-1趟目标 tmp=a[p]; for(j=p;j>0 && a[j-1]>tmp;j--) { a[j]=a[j-1]; } a[j]=tmp; } } int median3(int a[],int left,int right) { int mid=(left+right)/2; if(a[left]>a[mid]) swap(a[left],a[mid]); if(a[left]>a[right]) swap(a[left],a[right]); if(a[mid]>a[right]) swap(a[mid],a[right]); swap(a[mid],a[right-1]); return a[right-1]; } const int cutoff=3; void Qsort(int a[],int left,int right) { int pivot,i,j; //左小右 if(left+cutoff<=right) { //三数取中 pivot=median3(a,left,right); i=left;j=right-1; //分割 for(;;) { while(a[++i]<pivot){} while(a[--j]>pivot){} if(i<j) swap(a[i],a[j]); else break; } //换回轴枢 swap(a[i],a[right-1]); Qsort(a,left,i-1); Qsort(a,i+1,right); } else InsertionSort(a+left,right-left+1); } void main() { int a[13]={13,12,11,10,9,8,7,6,5,4,3,2,1}; Qsort(a,0,12); return ; }
相关文章推荐
- 快速排序 quickSort
- 算法——快速排序
- 算法导论 第7章 快速排序
- 白话经典算法系列之六 快速排序 快速搞定
- java 数组的排序,含冒泡、插入、选择、快速排序。
- 快速排序之按主元分块新方法(值得一看)
- 【转载】白话经典算法系列之六 快速排序 快速搞定
- 快速排序
- 排序---交换排序---快速排序Quick Sort
- 排序:快速排序与归并排序
- 快速排序
- HDU 1157 Who's in the Middle (快速排序 or 任意排序)
- 算法之快速排序
- List<T>采用delegate快速实现排序、查找等操作
- 快速排序
- 白话经典算法系列之六 快速排序 快速搞定
- 快速排序的C语言代码实现
- 牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)
- 常用排序工具类:标准【正序、倒序】排序算法‘冒泡排序,选择排序,快速排序’
- 第十六周项目(1):验证算法4——快速排序