zoukankan      html  css  js  c++  java
  • 快速排序学习笔记

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

    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 }
  • 相关阅读:
    MarkDown测试
    在Tabbed Activity(ViewPager)中切换Fragment
    About ListView
    Android Studio的技巧
    卷积神经网络
    TensorFlow中CNN的两种padding方式“SAME”和“VALID”
    tensorflow-解决3个问题
    激活函数
    tensorflow数学运算
    tensorflow
  • 原文地址:https://www.cnblogs.com/Grace-is-enough/p/8586026.html
Copyright © 2011-2022 走看看