快速排序的递归方法总结
2017-03-02 20:34
232 查看
原始算法
MethodA.cpp
#include "stdafx.h" #include "MethodA.h" MethodA::MethodA(int* ve) { A = ve; } MethodA::~MethodA() { } int* MethodA::QuickSort( int p, int r) { if (p < r) { int q = Partition( p, r); QuickSort(p, q - 1); QuickSort(q + 1,r); } return A; } int MethodA::Partition( int p, int r) { int x = A[r]; int i = p-1; for ( int j = p; j < r; j++) { if (A[j] <= x) { i = i + 1; exchange(i, j); } } if (i + 1 < r) { i++; exchange(i, r); } return i; } void MethodA::exchange(int a, int b) { int x = A[a]; A[a] = A; A[b] = x; }
[b]随机枢轴
MethodB.cpp
#include "stdafx.h" #include "MethodB.h" #include "stdlib.h" #include "time.h" MethodB::MethodB(int* ve) { A = ve; } MethodB::~MethodB() { } int* MethodB::QuickSort(int p, int r) { if (p < r) { int q = Partition(p, r); QuickSort(p, q - 1); QuickSort(q + 1, r); } return A; } int MethodB::Partition(int p, int r) { //生成随机的枢轴 srand(r); int t = rand()%(r-p)+p; exchange(t, r); //下同原始快速排序 int x = A[r]; int i = p - 1; for (int j = p; j < r; j++) { if (A[j] <= x) { i = i + 1; exchange(i, j); } } exchange(i + 1, r); return i + 1; } void MethodB::exchange(int a, int b) { int x = A[a]; A[a] = A; A[b] = x; }
[b]三数取中
MethodC.cpp
#include "stdafx.h" #include "MethodC.h" MethodC::MethodC(int* ve) { A = ve; } MethodC::~MethodC() { } int* MethodC::QuickSort(int p, int r) { if (p < r) { int q = Partition(p, r); QuickSort(p, q - 1); QuickSort(q + 1, r); } return A; } int MethodC::Partition(int p, int r) { //生成随机的枢轴 int t = getMid(p, (p + r) / 2, r); exchange(t, r); //下同原始快速排序 int x = A[r]; int i = p - 1; for (int j = p; j < r; j++) { if (A[j] <= x) { i = i + 1; exchange(i, j); } } exchange(i + 1, r); return i + 1; } void MethodC::exchange(int a, int b) { int x = A[a]; A[a] = A; A[b] = x; } int MethodC::getMid(int a, int b, int c) { if ((A[a] > A[b] && A[a] < A[c])||(A[a]>A[c]&&A[a]<A[b])) { return a; } else if ((A[b] > A[a] && A[b] < A[c]) || (A[b]<A[a] && A[b]>A[c])) { return b; } else return c; }
[b]三数取中+直排
MethodD.cpp
#include "stdafx.h" #include "MethodD.h" #include "InsertSort.h" MethodD::MethodD(int *arr) { A = arr; } MethodD::~MethodD() { } int* MethodD::QuickSort(int p, int r) { if (p < r) { int q = Partition(p, r); if (r - p>N - 1) { QuickSort(p, q - 1); QuickSort(q + 1, r); 4000 } else { A=InsertSort(A).Sort(p, r); } } return A; } int MethodD::Partition(int p, int r) { int x = A[r]; int i = p - 1; for (int j = p; j < r; j++) { if (A[j] <= x) { i = i + 1; if(i!=j) exchange(i, j); } } exchange(i + 1, r); return i + 1; } void MethodD::exchange(int a, int b) { int x = A[a]; A[a] = A; A[b] = x; }
[b]插入排序
InsertSort.cpp
#include "stdafx.h" #include "InsertSort.h" InsertSort::InsertSort(int* ve) { A = ve; } InsertSort::~InsertSort() { } int * InsertSort::Sort(int p, int q) { for (int i = p; i <= q; i++) { for (int j = p; j <i; j++) { if (A[i]<A[j]) { int tmp = A[i]; for (int k = i- 1; k >= j; k--) { A[k + 1] = A[k]; } A[j] = tmp; break; } } } return A; } //void InsertSort::exchange(int a, int b) //{ // int x = A[a]; // A[a] = A[b]; // A[b] = x; //}
相关文章推荐
- 快速排序的递归和非递归实现方法
- Java 选择排序、冒泡排序、快速排序、直接插入排序、Java自带的排序等方法的使用和总结
- 排序方法总结(递归与非递归)
- [算法入门]快速排序非递归方法(Java实现),大家一起来找茬啊~
- 数据结构排序算法总结包括选择、插入、希尔、快速、冒泡等排序方法
- PHP 数组排序方法总结 推荐收藏
- PHP 数组排序方法总结 推荐收藏
- 我的C语言快速排序方法
- 快速排序递归和非递归算法
- 快速排序List的通用方法
- 各种排序方法总结
- 递归快速排序
- 快速排序List的通用方法
- DataTable各种方法总结(给Datatable添加行列、DataTable选择排序等
- 快速排序的递归和非递归解法
- 霍尔快速排序 非递归 C++实现
- 各种数组排序方法总结(Java)
- C语言常用的三种排序方法总结与探讨
- 总结:几种常见的内部排序方法
- c#中快速排序的方法(转载)