快速排序

快速排序的基本思想是: 
在待排序的n个记录中任取一个记录作为基准点,基准点一般选第1个记录。数据区间被此基准点 
划分为两个部分,所有比该基准点小的数据都排在它前半部分,所有比该基准点大的数据都排在它右半部分,并 
把该基准点排在这两部分中间(成为记录归位)。这个过程成为一趟快速排序。然后对基准点左,右两个部分分别重复上述 
操作,直到每部分只有一个记录为止。

这个思想再简而言之就是:每趟排序使表中的某一个元素(基于某种标准算出的基准点)放入到适当的位置,将表一分为二, 
对于子表按递归方式继续这种划分,直至划分的子表长度为1.

下面的这段动画演示了{3,6,5,9,7,1,8,2,4}这组数据快速排序的全过程:

quicksort

 

代码实现(Java)如下:

public class QuickSort { public static int[] quickSort(int[] arr, int start, int end) { if (start < end) { // 确保区间内有一个以上元素 // 设定一个基准值,这个基准值的选择其实也可以好好考究,为了突出快排的核心算法,就选择区间的第一个数 int temp = arr[start]; int i = start; int j = end; while (i < j) { while (i < j && arr[j] >= temp) {// 从区间两端交替向中间扫描,直到i==j为止 j--; // 从右到左扫描比基准值小的数 } arr[i] = arr[j];// 将比基准值小的数移到左端 while (i < j && arr[i] <= temp) { i++;// 从左到右扫描比基准值大的数 } arr[j] = arr[i];// 将比基准值大的数移到右端 } arr[i] = temp;// 记录归位 quickSort(arr, start, i - 1);// 对基准点的左半部分进行排序 quickSort(arr, i + 1, end);// 对基准点的右半部分进行排序 } return arr; } public static void main(String[] args) { int[] arr = { 2, 1, 3, 7, 8, 6, 5, 9, 4 }; int[] arr1 = quickSort(arr, 0, arr.length - 1); for (int i = 0; i < arr1.length; i++) { System.out.println(arr1[i]); } }}

作者: Chris Wang 
出处: 
http://chriswang.cnblogs.com/ 
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值