快速排序
来源:互联网 发布:java messagequeue 编辑:程序博客网 时间:2024/06/05 16:27
#include <iostream>using namespace std;int Partition(int *data, int length, int start, int end);int Partition2(int *data, int length, int start, int end);void quickSort(int *data, int length, int start, int end){ if (start < 0 || end < start || data == NULL) return; int pivot = Partition2( data, length, start, end); if (pivot > start) quickSort(data, length, start, pivot - 1); if (pivot < end) quickSort(data, length, pivot + 1, end);}void swap(int &d1, int &d2){ int temp = d1; d1 = d2; d2 = temp;}//思路:首元素作为pivot值,将首元素放到数组末尾,然后依次将数组值与data[end]比较int Partition(int *data, int length, int start, int end){ //选第一个元素 swap(data[start], data[end]); int small = start - 1;//是数组的坐标 for (int index = start; index != end; index++){ if (data[index] < data[end]){ small++; if (small != index){ swap(data[index], data[small]); } } } small++;//pivot的位置 swap(data[small], data[end]); return small;}//大话数据结构中的方案,选头元素为pivot值,在交换过程中,pivot为end或start位置上的值int Partition2(int *data, int length, int start, int end){ //三选一,将中等大小的数值放在数组的开头 int mid = (end - start) / 2 + start; if (data[start] > data[mid]) swap(data[start], data[mid]); if (data[mid] > data[end]) swap(data[mid], data[end]); if (data[start] < data[mid]) swap(data[start], data[mid]); int pivot = data[start]; //pivot值不是在end就是在start while (end > start){ while (end > start && data[end] >= pivot) end--; swap(data[start], data[end]); while (end > start && data[start] <= pivot) start++; swap(data[start], data[end]); } return start;}
0 0
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- Halcon算子之fit_circle_contour_xld,用于圆拟合XLD轮廓
- python lambda
- android NDK开发(一)
- ubuntu上tpcc使用
- File.io读取文件(二)
- 快速排序
- 微擎系统
- 开发者技能修炼的五个等级
- Javaweb之发送邮件
- 高级需求分析师培训要点,如何正确编写需求用例的5个提示!
- SSH框架——整合Demo(Struts、Spring、Hibernate)
- ubuntu16.04下安装pip
- File.io读取文件(三)
- Spark 与 Kafka 集成出错: Apache Spark: java.lang.NoSuchMethodError