• 2021/9/21(希尔排序 + 快速排序)


    2021/9/21(希尔排序 + 快速排序)

    简单插入排序存在的问题:

    当存在这样一个数组:

    Arr = {2,3,4,5,6,1}

    当需要插入的数是较小的数时,这是需要移动次数非常多!
    插入排序代码:

    /**
         * insertVal 是即将要进行插入的值
         * index 是有序表中最后一个值的下标
         * @param arrays
         */
    // 第二种解决方案 , 这个才是真的插入操作 最优解法
    public static void insert2(int[] arrays){
      int insertVal = 0;
      int index = 0;
      int length = arrays.length;
      for (int i = 1; i <= length-1; i++) {
        // 准备插入的数
        insertVal  = arrays[i];
        // 表示与有序表的最后元素的下标
        index = i-1;
        // 如果插入的数比被插入的数小
        while (index>=0 && insertVal<arrays[index]){
          arrays[index+1] = arrays[index];
          index--;
        }
        // //把插入的数放入合适位置
        arrays[index+1] = insertVal;
      }
    }
    

    希尔排序介绍

    1959年提出的排序算法,是简单插入排序进过改进之后的一个更高效的版本。也称缩小增量排序

    当然shell排序也是插入排序

    // 总体代码实现
    public static void shellSort(int []array){
      int temp = 0;
      int index = 0;
      int length = array.length;
      // 步长
      int gap = length/2;
      while (gap >0){
        for (int i = gap; i < length; i++) {
          temp = array[i];
          index = i - gap;
          while (index>=0 && temp<array[index]){
            array[index+gap] = array[index];
            index-=gap;
          }
          array[index+gap] =temp;
        }
        gap /=2;
      }
    }
    

    快速排序

    快排,面试最喜欢问的排序算法。这是运用分治法的一种排序算法。

    快速排序,说白了就是给基准数据找其正确索引位置的过程.

    快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。

    空间换时间 快

    在上一篇有发具体的快排原理与代码。

  • 相关阅读:
    搭建视频网站光线cms
    Linux FTP服务配置
    Chromium下载地址
    Ubuntu Server批量ping选择最快源
    vs2010扩展
    私有云
    mssql格式化输出
    CSLA .NET 3.6支持Silverlight 2
    Unity Application Block 1.2 for Silverlight December 2008
    silverlight寻奇 Graphite
  • 原文地址:https://www.cnblogs.com/hujesse4/p/15318682.html
Copyright © 2020-2023  润新知