文章标题
来源:互联网 发布:安捷伦数据采集器软件 编辑:程序博客网 时间:2024/06/02 01:27
快速排序算法C++
快速排序算法每次先随机挑选一个数,把大于这个数的放在右边,小于这个数的放在左边,然后再分别对左右两个区间进行相同的操作。不断递归便能使数组有序;
partition区间划分
区间划分是快速排序算法的核心,主要思路一:
1. 随机选择一个数作为划分值,并将其交换到区间最后一个元素的位置
2. 同时维护一个区间来表示小于等于该元素值所构成的区间
3. 从最区间左边开始将元素i与划分值(最后一个元素)进行比较,如果小于等于划分值则将i与小于等于区间的下一个元素交换位置,并将小于等于区间右移一位
实现方式一:
int partition(int *a, int s, int e){//区间划分 int lower = s-1; for (int i = s; i < e; i++){ if (a[i] < a[e]){ swap(a[i], a[++lower]); } } swap(a[++lower], a[e]); return lower;}void fastsort(int *a, int s,int e){//递归 if (s >= e)return; //int mid = fastPartition(a, s, e); int mid = partition(a, s, e); fastsort(a, s, mid-1); fastsort(a, mid + 1, e);}
实现方式二:
int fastPartition(int *a, int s, int e){//快速排序 int n = e - s + 1; int temp = a[s]; int ans = 0; for (int i = s, j = e; j != i; ans = i){ if (a[i] > temp){ swap(a[i], a[j]), j--; continue; } if (a[j] < temp){ swap(a[i], a[j]), i++; continue; } if (a[i] == temp){ j--; continue; } if (a[j] == temp){ i++; continue; } } return ans;}int partition(int *a, int s, int e){ int lower = s-1; for (int i = s; i < e; i++){ if (a[i] < a[e]){ swap(a[i], a[++lower]); } } swap(a[++lower], a[e]); return lower;}
阅读全文
0 0
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 【笔记】一个实现多连接的蓝牙BLE的简单封装
- LoadRunnet_Run-time Settings 的详细说明
- JVM 通用参数调优
- USACO
- CPqD的参考资料
- 文章标题
- 进程与线程的一个简单解释
- 从苏宁电器到卡巴斯基(后传)第05篇:聊聊我对WannaCry产生的感慨
- arraylist的方法
- 第一篇博客写给自己
- 俩段神奇简单的代码
- 初识DynamicAnimator
- Web Navigation
- 可数集