码迷,mamicode.com
首页 > 编程语言 > 详细

java之快速排序

时间:2015-08-30 14:19:19      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

源代码:
今天看了《大话数据结构》的快速排序的算法,按照书中给的部分代码进行了完善,具体的实现如下: 1
/** 2 * java实现快速排序 3 */ 4 public class QuickSort_1 { 5 6 public static void main(String[] args) { 7 // TODO Auto-generated method stub 8 int[] list={34,3,53,2,23,7,14,10}; 9 QuickSort_1 qs=new QuickSort_1(); 10 qs.quickSort(list); 11 for(int i=0;i<list.length;i++){ 12 System.out.print(list[i]+" "); 13 } 14 } 15 16 public void quickSort(int[] list) { 17 if (list.length > 0) { //查看数组是否为空 18 QSort(list, 0, list.length - 1); 19 } 20 } 21 22 public void QSort(int[] list, int low, int high) { 23 int pivot; 24 if (low < high) { 25 pivot = partition(list, low, high); //将list数组进行一分为二,算出枢纽值pivot 26 QSort(list, low, pivot - 1); //对低字表进行递归排序 27 QSort(list, pivot + 1, high); //对高字表进行递归排序 28 } 29 } 30 31 public int partition(int[] list, int low, int high) { 32 int pivotkey = list[low]; //数组的第一个作为中轴 33 while (low < high) { 34 while (low < high && list[high] >= pivotkey) { 35 high--; 36 } 37 swap(list , low , high); //比中轴小的记录移到低端 38 while (low < high && list[low] <= pivotkey) { 39 low++; 40 } 41 swap(list , low , high); //比中轴大的记录移到高端 42 } 43 return low; //返回中轴的位置 44 } 45 /** 46 * 功能:交换数组下标low和high的位置 47 * @param list 48 * @param low 49 * @param high 50 */ 51 private void swap(int[] list, int low, int high) { 52 // TODO Auto-generated method stub 53 int tmp=list[low]; 54 list[low]=list[high]; 55 list[high]=tmp; 56 } 57 58 } 59   

快速排序的原理:

从待排序的数据序列中任取一个数据(如第一个数据)作为分界值,所有比它小的数据元素一律放在左边,所有比它大的元素一律放在右边,这样一趟下来该序列形成左右两个子序列,左边序列中数据元素的值都比分界值小,右边序列中数据元素的值比分界值大。

  接下来对左右两个子序列进行递归,对两个子序列重新选择中心元素并以此规则调整,直到每个子序列的元素只剩一个,排序完毕。

  

java之快速排序

标签:

原文地址:http://www.cnblogs.com/cheng-qw/p/4770722.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!