zoukankan      html  css  js  c++  java
  • java 算法基础之二快速排序算法

    所谓的快速排序的思想就是,首先把数组的第一个数拿出来做为一个key,在前后分别设置一个i,j做为标识,然后拿这个key对这个数组从后面往前遍历,及j--,直到找到第一个小于这个key的那个数,然后交换这两个值,交换完成后,我们拿着这个key要从i往后遍历了,及i++;一直循环到i=j结束,当这里结束后,我们会发现大于这个key的值都会跑到这个key的后面,不是的话就可能你写错了,小于这个key的就会跑到这个值的前面;然后我们对这个分段的数组再时行递归调用就可以完成整个数组的排序。

    用图形法表示由下:

    这样就以key分为了两个段,我们把这两个段再递进去就可以解决问题了

    实现代码由下:

     1 package com.quick;
     2 
     3 public class quick {
     4     public void quick_sort(int[] arrays, int lenght) {
     5         if (null == arrays || lenght < 1) {
     6             System.out.println("input error!");
     7             return;
     8         }
     9         _quick_sort(arrays, 0, lenght - 1);
    10     }
    11 
    12     public void _quick_sort(int[] arrays, int start, int end) {
    13         if(start>=end){
    14             return;
    15         }
    16         
    17         int i = start;
    18         int j = end;
    19         int value = arrays[i];
    20         boolean flag = true;
    21         while (i != j) {
    22             if (flag) {
    23                 if (value > arrays[j]) {
    24                     swap(arrays, i, j);
    25                     flag=false;
    26 
    27                 } else {
    28                     j--;
    29                 }
    30             }else{
    31                 if(value<arrays[i]){
    32                     swap(arrays, i, j);
    33                     flag=true;
    34                 }else{
    35                     i++;
    36                 }
    37             }
    38         }
    39         snp(arrays);
    40         _quick_sort(arrays, start, j-1);
    41         _quick_sort(arrays, i+1, end);
    42         
    43     }
    44 
    45     public void snp(int[] arrays) {
    46         for (int i = 0; i < arrays.length; i++) {
    47             System.out.print(arrays[i] + " ");
    48         }
    49         System.out.println();
    50     }
    51 
    52     private void swap(int[] arrays, int i, int j) {
    53         int temp;
    54         temp = arrays[i];
    55         arrays[i] = arrays[j];
    56         arrays[j] = temp;
    57     }
    58 
    59     public static void main(String args[]) {
    60         quick q = new quick();
    61         int[] a = { 49, 38, 65,12,45,5 };
    62         q.quick_sort(a,6);
    63     } 
    64 
    65 }
  • 相关阅读:
    利用Node.js的Net模块实现一个命令行多人聊天室
    JS判断鼠标进入容器方向的方法和分析window.open新窗口被拦截的问题
    Node.js:进程、子进程与cluster多核处理模块
    Node.js:理解stream
    Node.js:Buffer浅谈
    Node.js:OS模块
    一个unsigned int 数的二进制表示中有多少个1
    一个栈的入栈序列为ABCDEF,则不可能的出栈序列是
    文件操作:获取一个文件行数的方法
    利用sourceinsight宏(Quicker.em)提高编码效率和质量
  • 原文地址:https://www.cnblogs.com/hexiaochun/p/2668324.html
Copyright © 2011-2022 走看看