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

快速排序算法 java实现

时间:2017-07-28 16:20:47      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:main   and   ati   print   div   ++   序号   tar   color   


1
public class QuickRank { 2 public static void main(String[] args) { 3 int[] original={26,58,1,24,75,69,32,45,841,25898}; 4 QuickRank quickRank=new QuickRank(); 5 quickRank.rankSimple(original,0,original.length-1); 6 for(int i:original) 7 System.out.println(i); 8 } 9 //清晰明了 10 public void rankSimple(int[] original,int start,int end){ 11 if(end<=start) return;//递归结束条件 12 int standard=original[start]; 13 int leftOrder=start; 14 int rightOrder=end; 15 while(leftOrder<rightOrder){ 16 //从右往左跑 17 while(leftOrder<rightOrder && original[rightOrder]>standard) 18 rightOrder--; 19 original[leftOrder]=original[rightOrder]; 20 //从左往右跑 21 while(leftOrder<rightOrder && original[leftOrder]<standard) 22 leftOrder++; 23 original[rightOrder]=original[leftOrder]; 24 } 25 original[leftOrder]=standard; 26 //递归开始 27 rankSimple(original, start, leftOrder-1); 28 rankSimple(original, leftOrder+1, end); 29 } 30 }
结果:
1
24
26
32
45
58
69
75
841
25898

快速排序算法的思想:

  1.一次排序(在排序结束之前,数组中始终有一个位置看为“空值”,该位置待插入数据):

    ①随便取待排序数组的一个值(本例取第一个值)作为本次排序的基准值standard,原数组该值得位置可看成空值,待插入。

    ②从待排序数组右往左,依次比较每个值与standar的大小,如果有比standard小的,则将该值插入数组中的空值区域,此时,该值在数组中的位置看成 空值。

    ③从待排序数组左往右,依次比较每个值与standar的大小,如果有比standard大的,则将该值插入数组中的空值区域,此时,该值在数组中的位置看成空值。

    ④循环②③步骤,直到从右往左和从左往右的序号相等;表明本次排序结束,将standard放入该序号位置。此时,该序号前所有数字都小于standard,序号后所有的数字都大于standard,形成两个小的数组;

  2.迭代

    通过一次排序步骤后,便得到standard前后两个数组,然后分别将这两个数组进行一次排序,并迭代进行;

  3.迭代结束标志:

    进入一次排序的数组开始位置和结束位置相等,即传进来的是一个数字,不再需要排序;

 

快速排序算法 java实现

标签:main   and   ati   print   div   ++   序号   tar   color   

原文地址:http://www.cnblogs.com/jkavor/p/7250823.html

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