【数据结构】快速排序
2015-12-19 21:56
375 查看
对于一个int数组,请编写一个归并排序算法,对数组元素排序。
给定一个int数组A及数组的大小n,请返回排序后的数组。
测试样例:
[1,2,3,5,2,3],6
[1,2,2,3,3,5]
思路:
1, 选取第一个为哨兵,不要随机选取
2, 在交换的时候一定要注意偏移量,left一定要加上,不然通不过测试。
3, 统计完小于哨兵的counter后,交换一次key和A[counter]即可。
给定一个int数组A及数组的大小n,请返回排序后的数组。
测试样例:
[1,2,3,5,2,3],6
[1,2,2,3,3,5]
思路:
1, 选取第一个为哨兵,不要随机选取
2, 在交换的时候一定要注意偏移量,left一定要加上,不然通不过测试。
3, 统计完小于哨兵的counter后,交换一次key和A[counter]即可。
[code]#include<iostream> #include<string> using namespace std; class QuickSort { public: void print(int * A, int n){ for (int i = 0; i < n; i++) printf("%d ", A[i]); printf("\n"); } void swap(int * A, int * B){ int temp = *A; *A = *B; *B = temp; } void proccess(int * A, int left, int right){ if (left >= right) return; int shao = A[left]; int counter = 0; //哨兵的index swap(A + left, A + right); for (int i = left; i < right; i++){ if (A[i] <= shao){ swap(A + i, A + left + counter); counter++; } } swap(A + left + counter, A + right); proccess(A, left, left + counter -1); proccess(A, left + counter + 1, right); } int* quickSort(int* A, int n) { // write code here proccess(A, 0, n - 1); return A; } }; int main() { QuickSort s; int A[] = { 54, 35, 48, 36, 27, 12, 44, 44, 8, 14, 26, 17, 28 }; int n = 13; s.quickSort(A, n); s.print(A, n); }
相关文章推荐
- 数据结构与算法 LeetCode编程练习--Search and Inserted in sorted array
- MYSQL 设计数据结构需注意问题
- 数据结构-图
- 数据结构——链接表
- 【数据结构】归并排序
- 数据结构——栈
- 数据结构——队列
- 数据结构总结
- 数据结构期末总结
- 数据结构 — 归并排序
- 学期总结--数据结构学而有感
- 数据结构——二叉树
- 第十六周--数据结构--项目一-- 插入排序之直接插入排序
- 数据结构——图
- 第十五周--数据结构(项目三)--B-树的基本操作
- 第十五周--数据结构(项目一)--哈希表及其运算的实现
- 数据结构之——用C++实现邻接表的DFS与BFS
- 【数据结构】插入排序
- 【数据结构】选择排序
- 【数据结构】冒泡排序