快速排序各种版本(record)
2015-01-15 15:32
246 查看
#include<iostream> using namespace std; #define N 1000000 int a ; //选取枢纽元(3种方法) //1:选左端 //int select_pivot(int p, int q) //{ // return a[p]; //} //2:取中数 //void swap_ab(int p, int q) //{ // int temp = a[p]; // a[p] = a[q]; // a[q] = temp; //} //int select_pivot(int p, int q) //{ // int m = (p + q) / 2; // //m p q; // if (a[m] > a[q]) // { // swap_ab(m, q); // } // if (a[p] > a[q]) // { // swap_ab(p, q); // } // if (a[m] > a[p]) // { // swap_ab(m, p); // } // return a[p]; //} //随机枢纽元 void swap_ab(int p, int q) { int temp = a[p]; a[p] = a[q]; a[q] = temp; } int select_pivot(int p, int q) { int i = p + rand() % (q-p+1); swap_ab(i, p); return a[p]; } //双向扫描 int partition(int p, int q) { int pivot = select_pivot(p, q); /*int i = p + 1, j = q; int t = p; while (i <= j) { while (j >= i) { if (pivot <= a[j]) j--; else { a[t] = a[j]; t = j; j--; break; } } while (i <= j) { if (pivot >= a[i]) i++; else { a[t] = a[i]; t = i; i++; break; } } } a[t] = pivot;*/ int i = p,j=q+1; while (1) { do i++; while (i <= q&&a[i] <= pivot); do j--; while (j >= p+1&&a[j] >= pivot); if (i > j) break; swap_ab(i, j); } swap_ab(j, p); return j; } ////单向扫描 //int partition(int p, int q) //{ // int pivot = select_pivot(p, q); // int i = p; // for (int j = p + 1; j <= q; j++) // { // if (a[j] <= pivot) // { // i++; // swap_ab(j, i); // } // } // swap_ab(i, p); // return i; //} void quicksort(int p,int q) { if (p >= q) return; int t = partition(p, q); quicksort(p, t - 1); quicksort(t + 1, q); } int main() { int n; cin >> n; for (int i = 0; i < n; i++) { cin >> a[i]; } quicksort(0, n-1); for (int i = 0; i < n; i++) { cout << a[i] << ' '; } cout << endl; system("pause"); return 0; }
相关文章推荐
- 各种常见的排序 java版本(冒泡,选择,插入,希尔,快速)
- 第七章快速排序之“快速排序的随机化版本RANDOM-QUICKSORT”
- 快速排序的各种版
- 快速排序 归并排序的非递归版本 备忘
- 各种 快速排序 的比较~(仅仅是目前手上的资料出现的快速排序)
- 快速排序随机化版本
- 快速排序学习2(随机化版本)
- 经典算法--快速排序的随机化版本
- 《算法导论》笔记 第7章 7.3快速排序的随机化版本
- 快速排序与二分查找算法Javascript版本
- 快速排序版本二
- 各种排序算法总结----基数排序、归并排序、插入排序、冒泡排序、选择排序、快速排序、堆排序、希尔排序
- 数据结构(C#)--冒泡、插入、快速、堆、归并、希尔、选择各种排序排序过程比较以及各种排序的所用时间的对比
- 快速排序随机化版本
- java实现各种基础排序(冒泡排序、快速排序、直接选择排序、堆排序、直接插入排序、归并排序)
- 第七章快速排序之“快速排序Hoare版本HOARE-QUICKSORT”(思考题7-1)
- 每日编程7之快速排序非递归版本
- python版本的随机快速排序
- C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - .NET商业化成品成熟各种数据权限的需求对应例子代码
- 算法导论7.3快速排序的随机化版本