快速排序的递归方法总结
来源:互联网 发布:windows平板可以做什么 编辑:程序博客网 时间:2024/04/29 22:13
原始算法
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[b]; A[b] = x;}
随机枢轴
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[b]; A[b] = x;}
三数取中
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[b]; 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;}
三数取中+直排
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); } 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[b]; A[b] = x;}
插入排序
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;//}
0 0
- 快速排序的递归方法总结
- 快速排序的递归和非递归实现方法
- 快速排序非递归方法
- 归并排序的递归和非递归方法总结
- 用非递归的方法实现快速排序
- 用非递归的方法实现快速排序
- 快速排序的递归程序
- 快速排序的递归实现
- 快速排序的递归实现
- 快速排序的递归实现
- 非递归的快速排序
- 快速排序的递归实现
- 递归形式的快速排序
- 快速排序的递归实现
- 快速排序的递归算法
- 快速排序的递归写法
- 快速排序的递归实现
- 【30】非递归方法实现快速排序
- 简单粗暴的切面实战
- Codeforces 466E Information Graph【Dfs处理父子关系+并查集+离线查询】好题!
- 二分——Codeforces Round #377 (Div. 2) D
- eclipse搭建cocos2d-x开发环境
- unix 环境高级编程3
- 快速排序的递归方法总结
- ubnutn 分辨率调节
- 关于使用eclipse开发安卓时布局界面XML的graphical layout没有显示的问题
- 冷知识 —— 文学(名与字)
- ife系列之自定义鼠标右键菜单
- 数据库管理系统
- 前端工具之npm
- 从NestedScrollingChild、NestedScrollingParent源码分析嵌套滑动机制
- 链接