快速排序
2017-09-01 13:18
120 查看
快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
通俗的来说,就是每次选数组的第一个数作为基数,然后以后的操作就是把在基数右边且小于该基数的数与该基数交换和在基数左边且大于该基数的数与该基数交换(就是把小于基数的数放在该基数的左边,大于基数的数放在该基数的右边)
通俗的来说,就是每次选数组的第一个数作为基数,然后以后的操作就是把在基数右边且小于该基数的数与该基数交换和在基数左边且大于该基数的数与该基数交换(就是把小于基数的数放在该基数的左边,大于基数的数放在该基数的右边)
/* 快排思想: 1、每次取区间内的第一个数的值作为基数; 2、然后在区间内从后往前找第一个小于基数的数组的值,然后将找到的这个数与基数的位置进行交换, 3、接着在区间内从前往后找第一个大于等于基数的数组的值,然后将找到的这个数与基数的位置进行交换 4、重复以上步骤 */ #include <iostream> using namespace std; void Quick_Sort(int data[],int L, int R) { if (L > R) return; int i = L,j = R,x = data[L]; while (i < j) { while (i < j && data[j] >= x)//找到第一个大于基数的值 { j--; } if (i < j){ swap(data[i], data[j]); i++; } while (i < j && data[i] < x)//找到第一个小于等于基数的值 { i++; } if (i < j){ swap(data[i], data[j]); j--; } } Quick_Sort(data,L, i - 1);//将[L,i-1]区间的数组重复以上操作 Quick_Sort(data,j + 1, R);//将[j+1,R]区间的数组重复以上操作 } int main() { int data[] = { 11, 3, 33, 84, 25, 42, 10, 6, 76, 22 }; Quick_Sort(data,0, 9); for (int i = 0; i < 10; i++){ printf("%d ",data[i]); } puts(""); return 0; }
相关文章推荐
- 快速排序注意事项
- 八大排序算法-快速排序
- 快速排序 php与javascript的不同之处
- 快速排序 之添加复合插入排序和原始序列取中值左pivot
- Android中ListView字母排序,实现字母挤压效果以及右侧快速选中字母,搜索关键字功能
- 快速排序 C++
- 快速排序
- [php] 数据结构&算法(PHP描述) 快速排序 quick sort
- 算法-快速排序
- 快速排序
- 算法学习之三:快速排序
- 归并排序、快速排序
- 快速排序
- 快速排序的改进
- 浅谈算法和数据结构(4):快速排序
- PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
- 快速排序
- c++ 快速排序
- 快速排序——HDU 1425
- 快速排序