快速排序的几种实现
来源:互联网 发布:纽昂司软件成都分公司 编辑:程序博客网 时间:2024/06/05 20:39
通过分而治之的思想,将待排序的序列划分为两个子序列,并分别进行排序。
#include <iostream>#include <utility>#include <cstdlib>using namespace std;int partition(int *a, int left, int right){ int pivot = a[right]; int i = left - 1; for(int j = left; j < right; j ++) if(a[j] <= pivot) swap(a[++i], a[j]); swap(a[i+1], a[right]); return i+1;}int partition_hoare(int *a, int left, int right){ int pivot = a[left]; int i = left - 1, j = right + 1; while(1){ do{j --;} while(a[j] > pivot); do{i ++;} while(a[i] < pivot); if(i < j) swap(a[i], a[j]); else return j; }}int partition_hoare_update(int *a, int left, int right){ int pivot = a[left]; int i = left, j = right; while(i < j){ while(i < j && a[j] >= pivot) j --; if(i < j) a[i++] = a[j]; while(i < j && a[i] <= pivot) i ++; if(i < j) a[j--] = a[i]; } a[j] = pivot; return j;}void quick_sort(int *a, int left, int right){ if(left < right){ //int p = partition(a, left, right); int p = partition_hoare(a, left, right); quick_sort(a, left, p-1); quick_sort(a, p+1, right); }}int main(){ int n = 1000000; int *a = new int[n]; for(int i = 0; i < n; i ++) a[i] = rand(); quick_sort(a, 0, n-1); //validate for(int i = 0; i < n; i ++) if(i + 1 < n && a[i] > a[i + 1]){ cout << "error" << endl; break; } return 0;}
0 0
- 快速排序的几种C++实现
- 快速排序的几种实现方法
- 快速排序的几种实现
- 快速排序算法的几种实现
- 快速排序的几种实现方式
- 快速排序算法的几种版本及实现
- 快速排序的几种常见实现及其性能对比
- 快速排序算法的思想和几种实现方式
- 几种基本排序的实现:选择排序,冒泡排序,插入排序,堆排序,快速排序,归并排序
- 几种快速的排序算法
- 快速排序的几种改进
- 快速排序的几种优化
- 优化快速排序的几种方法
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- java几种常见的排序:冒泡排序,快速排序
- 几种快速排序的几点疑问
- 几种常见排序算法的实现(冒泡法,选择法,插入法,快速排序、堆排序)
- 001-简单的java代码实现几种排序算法(插入,快速,冒泡,选择)
- 关于调试时出现“源文件与模块生成时的文件不同”
- mysql-cluster 7.3.5-linux 安装
- ADB获取手机的应用名称
- hdu 1063&&poj 1001
- 用Jquery怎么删除class相同 但id不同的元素?
- 快速排序的几种实现
- 解决不同手机屏幕下字体变大、变小的问题
- Android获得摄像头详细信息
- 发布IOS应用程序到苹果APP STORE完整流程
- 2014年7月19日笔记 执行ADB命令行的源代码
- 编译hadoop-2.4.0源文件
- 手动清除缓存
- jQuery中bind/live绑定事件的区别
- 这回应该可以了吧了长v是的和旅客v领是和德里克就了句历史课京东