模板 C/C++ 快速排序
2019-03-17 15:31
246 查看
一、基本思想
通过一趟排序将待排序列分割成独立的两部分,其中一部分关键字均比另外一部分的关键字小,这两部分记录再继续进行排序,以达到整个序列有序。
二、代码实现
关键代码
void quickSort(int l,int r){ int mid = (arr[l]+arr[r])>>1; int i = l, j = r; do{ while(arr[i] < mid){ i ++; } while(arr[j] > mid){ j --; } if(i <= j){ int p = arr[i]; arr[i] = arr[j]; arr[j] = p; i ++; j --; } }while(i<=j); if(i < r){ quickSort(i,r); } if(j > l){ quickSort(l,j); } }
完整代码
#include<cstdio> const int size = 100005; using namespace std; int n; int arr[size]; int read(){ int f = 1,ans = 0; char c; c = getchar(); while(c<'0'||c>'9'){ if(c == '-'){ f = -1; } c = getchar(); } while(c>='0'&&c<='9'){ ans = ans*10+c-'0'; c = getchar(); } return f*ans; } void quickSort(int l,int r){ int mid = (arr[l]+arr[r])>>1; int i = l, j = r; do{ while(arr[i] < mid){ i ++; } while(arr[j] > mid){ j --; } if(i <= j){ int p = arr[i]; arr[i] = arr[j]; arr[j] = p; i ++; j --; } }while(i<=j); if(i < r){ quickSort(i,r); } if(j > l){ quickSort(l,j); } } int main() { n = read(); for(int i = 1; i <= n; i ++){ arr[i] = read(); } quickSort(1,n); for(int i = 1; i <= n; i ++){ printf("%d ",arr[i]); } return 0; }
相关文章推荐
- C++模板快速排序和Stooge排序
- 快速排序,c++ 模板技术表述,完全兼容标准库!!!
- 利用c++模板实现快速排序
- 排序之冒泡 选择 插入 快速(c++)
- C++ ------------排序算法(冒泡排序-快速排序-选择排序-插入排序-希尔排序)
- C/C++ 排序算法 及 时间复杂度和空间复杂度 (直接插入排序,折半插入排序,希尔排序,简单选择排序,堆排序,冒泡排序,快速排序,归并排序,基数排序)
- 快速排序(C++实现)
- C++ 快速排序
- 每天一个c++小程序(1):快速排序
- C++代码,数据结构-内部排序-交换排序-快速排序
- 交换排序——冒泡排序和快速排序,C++代码实现
- C++模板实现直接插入排序
- 快速排序 c++实现2.0
- C++实践排序函数模板项目的参考方法
- 快速排序 C++
- C++ 快速排序
- C++学习 - 快速排序,更加优化的实现
- 单链表的归并、快速排序 C++
- C++ 快速排序QuickSort的实现
- 快速排序:源码(C++)--伪代码--时间复杂度解析