快速排序
来源:互联网 发布:php魔术方法析构方法 编辑:程序博客网 时间:2024/06/14 09:39
快速排序
排序思想:1.首先选定一个标志值(一般选第一个)value,比其大的放在右边,比其小的放在左边;
2.再分别递归处理value左边和右边的集和;
时间复杂度:o(n^log2n)
稳定性:不稳定
例如:
// value = 12, i遍历左边的值,j遍历右边的值;直到i=j的时候结束遍历,此时value左边的值全比右边的小,一次递归结束;
//
// 把比12小的放在左边,比12大的放在右边
//
// 12 3 45 65 18 5 2 11 4
// i j
//
// 4 3 45 65 18 5 2 11 4
// i j
//
// 4 3 45 65 18 5 2 11 45
// i j
//
// 4 3 11 65 18 5 2 11 45
// i j
//
// 4 3 11 65 18 5 2 65 45
// i j
//
// 4 3 11 2 18 5 2 65 45
// i j
//
// 4 3 11 2 18 5 18 65 45
// i j
//
// 4 3 11 2 5 5 18 65 45
// i j
//
// 4 3 11 2 5 12 18 65 45
// ij
//快速排序接口函数
void quick_sort(int *array, int length)
{if(array != NULL && length > 1){
Quick_sort(array, 0, length - 1);
}
}
//快速排序内函数
static void Quick_sort(int *array, int begin, int end)
{int i = begin;
int j = end;
int value = array[i]; //作为判决左右部分的值
if(begin < end){ //快排递归结束条件
j
while(i < j){ //i和j相等说明整个序列遍历结束
while(j > i && array[j] > value){ //从后向前找比value小的值放在i的位置
j--;
}
if(j > i){
array[i++] = array[j];
}
while(i < j && array[i] < value){ //从前向后找比value大的值放在j的位置
i++;
}
if(i < j){
array[j--] = array[i];
}
}
array[i] = value;
//递归处理i的左部分和右部分
Quick_sort(array, begin, i - 1);
Quick_sort(array, i + 1, end);
}
}
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- Java try finally
- 20技巧
- java周总结
- JavaWeb——文件上传,通过request.getInputStream()无法获取文件内容的问题
- android之MIME
- 快速排序
- 在SQL数据库中保存数据Saving Data in SQL Databases——翻译自developer.android.com Training
- 编程之美
- Bestcoder Pro.ID 2017 字符串统计
- Servlet-mapping坑我
- 那些年踩过的CSS坑(永久更新)
- Linux配置java环境
- 坦克世界体验总结
- 几种类间关系:继承、实现、依赖、关联、聚合、组合及UML实现图