快速排序学习笔记

今天看了一篇文章,关于快速排序的,了解了快排的主要思想是:

1、先从数列中取出一个数作为基准数

2、分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边

3、再对左右区间重复第二步,直到各区间只有一个数

然后再看了网上的一些排序的整体流程,自己用java实现了下快排的算法,可以说根据网上的流程,然后抽出当中重复的部分,编写成一个方法,然后递归调用就好了。

通过自己的动手实现感觉,这个基准数貌似应该选择首位或者末位的数进行比较,因为我个人再实现过程中,发现只要我取不是取首位或者末尾的数作为基准,排序总是

会存在问题,但是整个流程又是照着网上说明的核心步骤写的,哎~不知道是不是自己学艺不精啊~另外,当我们选择的是首个数作为基准的时候,我们必须要从排序区块

的尾部开始排序,否则反之,不然是无法排序出来的。不管有没有问题,至少在满足我所认为应该满足的基础上是可以实现效果了的,以前上学的时候还没有搞懂过快排

呢!有点成就感。下面是我的代码,^_^

 1 package 算法.排序;
 2 
 3 import java.util.Random;
 4 /**
 5  * 快速排序
 6  * @author Administrator
 7  *
 8  */
 9 public class QuickSort {
10     // 被排序数组
11     static int[] beSortArr = {5,12,6,9,3,1,10,12};
12     public static void main(String[] args) {
13         sortCore(0, beSortArr.length-1);
14         for (int i = 0;i<beSortArr.length;i++) {
15             System.out.print(beSortArr[i]);
16             if (i != beSortArr.length - 1) {
17                 System.out.print(" ");
18             }
19         }
20         System.out.println();
21     }
22     
23     /**
24      * 快速排序算法的核心代码
25      */
26     public static void sortCore(int a, int b) {
27         if (a > b) {
28             return;
29         }
30         // 这里的基准一般取左或者取右,在取左的时候,那么就要先从数组右边开始比较,否则反之。
31         // 不然的话,数组将无法正常被排序
32         int Xps = b;
33         int standardValue = beSortArr[Xps];
34         // 左边跑
35         boolean isLeftGo = true;
36         for (int tempA = a, tempB=b; tempA != tempB;) {
37             if (isLeftGo) {
38                 if (beSortArr[tempA] > standardValue) {
39                     // 数据交换
40                     int tempChangeSpace = beSortArr[tempA];
41                     beSortArr[tempA] = standardValue;
42                     beSortArr[Xps] = tempChangeSpace;
43                     Xps = tempA;
44                     // 从右边跑 
45                     isLeftGo = false;
46                 } else {
47                     tempA++;
48                 }
49             } else {
50                 if (beSortArr[tempB] < standardValue) {
51                     // 数据交换
52                     int tempChangeSpace = beSortArr[tempB];
53                     beSortArr[tempB] = standardValue;
54                     beSortArr[Xps] = tempChangeSpace;
55                     Xps = tempB;
56                     // 从左边跑 
57                     isLeftGo = true;
58                 } else {
59                     tempB--;
60                 }
61             }
62         }
63         sortCore(a, Xps-1);
64         sortCore(Xps+1, b);
65     }
66 }

 

posted @ 2018-03-16 22:19  蒙恩少年  阅读(161)  评论(0编辑  收藏  举报