• 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 }
  • 相关阅读:
    数据结构与算法(4)——python内置数据类型性能
    数据结构与算法(3)——变位词判断问题
    数据结构与算法(2)——算法复杂度O
    数据结构与算法(1)——图灵机计算模型
    R = [obj for obj in recs[imagename] if obj['name'] == classname] KeyError: '007765'
    关于windows下的libtorch配置
    09异常处理
    08多态与异常
    java07接口与继承动手动脑
    java06作业归档
  • 原文地址:https://www.cnblogs.com/hexiaochun/p/2668324.html
Copyright © 2020-2023  润新知