排序-快速排序
2016-04-11 17:34
344 查看
快速排序
单线程最快的排序,每次排序使得序列基本有序,最后使得序列有序
说多了没用,直接看代码
main测试
欢迎指正
单线程最快的排序,每次排序使得序列基本有序,最后使得序列有序
说多了没用,直接看代码
#include <stdio.h> //三数取中,为了提高效率可以多数取中 void ThreeToOne(int* L, int low, int high) { int middle = low + (high - low) / 2; if (L[low] > L[high]) { swap(L, low, high); } if (L[middle] > L[high]) { swap(L, high, middle); } if (L[middle] > L[low]) { swap(L, middle, low); } } int Partition(int* L, int low, int high) { //3数取中间的数 ThreeToOne(L, low, high); int pivotkey = L[low];//初始化枢轴为第一个元素 int temp = L[0]; while (low < high) { //比pivotkey大的数放在右边 while (low < high && L[high] >= pivotkey) { high--; } //myswap(L, low, high); L[low] = L[high]; //比pivotkey小的数放在左边 while (low < high && L[low] <= pivotkey) { low++; } //myswap(L, low, high); L[high] = L[low]; } L[low] = temp; return low; } //普通数组的插入排序 void InsertSort(int* L, int length) { int i; int j; int min_index; int temp = 0; for (i = 1; i < length; i++) { if (L[i] < L[i - 1]) { temp = L[i]; for (j = i - 1; L[j] > temp; j--) { L[j + 1] = L[j]; } L[j + 1] = temp; } } } //尾递归的快速排序效率较高 void QSort_Weidigui(int* L, int low, int high) { int pivot; //排序个数较多采用快速排序 //MAX_LENGTH_INSERT_SORT 排序数量 if ((high - low) > MAX_LENGTH_INSERT_SORT) { while (low < high) { pivot = Partition(L, low, high); QSort_Weidigui(L, low, pivot - 1);//枢轴左序列排序 下一次的递归 high = pivot - 1 low = pivot + 1; } } else { //较少的排序元素采用插入排序 InsertSort(L, high); } } //快速排序 void QuickSort(int* L, int length) { QSort_Weidigui(L, 0, length - 1);//数组最后一个元素不存在 }
main测试
int main(void) { int x[10] = { 50, 10, 90, 30, 70, 40, 80, 60, 20, 100 }; showArray(x, 10); QuickSort(x, 10);//start sort printf("\n"); showArray(x, 10); system("pause"); return 0; }
欢迎指正
相关文章推荐
- leetcode 124. Binary Tree Maximum Path Sum
- Qt QString.arg参数的一点注意
- Java基础之——泛型(二) 通配符
- CHAPTER 1 Introduce
- iOS 端导入微信支付 就爆21个红色警告
- 并查集算法和路径压缩
- redis数据持久化
- 深入理解C++中函数参数——传值与传址详解
- linux 清理缓存
- HTML5 canvas 制作动画原理
- 一个通用的Makefile
- Android Dalvik虚拟机初识
- Logstash add_field 参数应用
- 文字在表格位置处理—line-height
- 剑指offer:把二叉树打印成多行
- Android官方开发文档Training系列课程中文版:管理音频播放之控制APP的音量与播放
- Rational Software Architect 的介绍和基础教程
- flex学习进度1
- LeetCode 230 -Kth Smallest Element in a BST ( JAVA )
- 【OpenCV学习笔记 003】图像的载入、显示和输出