首页 > 代码库 > 快速排序的算法

快速排序的算法

  自学java到数组时,学习到了两种排序方法:选择排序和冒泡排序,冒泡排序是选择排序的进阶阶段,精简了运算的过程。了解到,java语言已经提供了排序的方法:通过util.Arrays.sort可以对数组进行自动排序,而排序方法用的是快速排序的一种。

  快速排序是冒泡排序的进阶阶段,那么快速排序的基本原理又是什么呢。通过查阅资料,了解了算法,自己也尝试了写了一些快速排序的算法原理。

 1 package array;
 2 //快速排序原理
 3     import java.util.Arrays;
 4 public class QuickSort 
 5 {
 6     public static void main(String[] arg)
 7     {
 8         int[] sort={56,656,23,45,523,46,1,34,78};//对这个乱序数组进行排序。
 9         int low=0;                               //定义一个起始的角标和末尾的角标。
10         int tall=sort.length-1;
11         suanfa(sort,low,tall);
12         System.out.print(Arrays.toString(sort));
13         
14     }
15     public static void suanfa(int[] sort,int low,int tall)//把这个数组和两端的角标带入新的方法中
16     {
17         int key=sort[low];//确定一个key值,用这个值与其他值比较。一般选key为第一个值或者最后一个值。
18         int a=low;        //定义a,b 这两个指针,两端开始都向中间移动。用key值和2个指针指的数值比较。
19         int b=tall;
20         while (a<b)        //两指针不能重合或者穿过去,重合时key的位置就已经确定了。
21         {
22             while(a<b&&sort[b]>key)//右边的指针向左移动,与key比较。
23             {
24                 b--;
25             }
26             if(key>=sort[b])//当key的值大于右边指针的值时。2端指针的值交换位置。
27             {
28                 int tamp=sort[a];
29                 sort[a]=sort[b];
30                 sort[b]=tamp;
31             }
32             while(a<b&&sort[a]<key)//左边的指针向右移动,与key比较。
33             {
34                 a++;
35             }
36             if(key<=sort[a])//当key的值小于右边指针的值时。2端指针的值交换位置。
37             {
38                 int tamp=sort[a];
39                 sort[b]=sort[a];
40                 sort[a]=tamp;
41             }
42         }
43         //这样就确定了key的位置,key的左边全是小于key的数;右边全是大于key的数,分为了2部分。进行递归循环就确定所有值的位置了。
44         if(b<tall)
45         {
46             suanfa(sort,b+1,tall);
47         }
48         if(a>low)
49         {
50             suanfa(sort,low,a-1);
51         }
52     }
53 }

打印结果为[1, 23, 34, 45, 46, 523, 78, 656, 656],证明是正确的

快速排序的算法