美文网首页
排序算法

排序算法

作者: 衣谷广隶 | 来源:发表于2019-11-09 17:17 被阅读0次

直接插入排序,时间复杂度为O(n^2)

分析:假设是从小到大排序,将数组分为已经排序的与未排序的,将未排序的元素逐一插入有序的那部分,直至所有的元素都在有序的部分。

  • 将长度为n的第一个元素视作有序的那部分S,取无序的那部分的第一个元素,即是数组的第二个元素插入S;
  • 将第三个元素插入S;
    .....
  • 第n个元素插入S,排序完成;

将元素T插入有序数组S的方法:从尾到头取S的元素S[i],若S[i]>T,将S[i]向右移动一位,如此继续比较S[i-1]、S[i-2]...,直到出现不比T小的元素,结束移动并插入T。

public static void insertSort(int[] arr) {
        int len = arr.length;
        int tmp;
        for (int i = 1; i < len; i++) {
            tmp = arr[i];//用来比较的目标元素
            int j = i - 1;//取有序组的尾部索引

            //移动,只要比目标大,就往右移,给新人空出位置
            while (j >= 0 && tmp < arr[j]) {
                arr[j + 1] = arr[j];//有序组元素比目标元素大,说明目标元素需要放入其后,向右移动一位
                j--;//索引移动
            }

            //移动结束,新人填坑
            arr[j + 1] = tmp;
        }
    }

折半插入排序,其实是在有序组做查找时用了“二分法查找”,提高效率

/**
     * 折半插入排序法,直接插入排序的改进版,
     * 采用二分查找法,减少比较次数
     *
     */
    public static void insertHalfSort(int[] arr) {
        int Len = arr.length;
        int tmp,high,low,midle;
        for (int i = 1; i < Len ; i++) {
            tmp = arr[i];
            low = 0; high = i -1;
            
            //二分法查找目标元素的插入位置
            while(low <= high){
                midle = (low + high)/2;
                if(tmp > arr[midle]){
                    low = midle + 1;
                }else {
                    high = midle - 1;
                }
            }
            
            //有序组中目标位置及往后的元素,向后移动一位
            for(int j =i -1; j >= high +1;j --){
                System.out.println(j);
                arr[j + 1] = arr[j];
            }
            
            //插入目标元素
            arr[high + 1] = tmp;
        }
    }

相关文章

  • java实现快速排序、归并排序、希尔排序、基数排序算法...

    快速排序算法 归并排序算法 希尔排序算法 基数排序算法

  • web开发需要知道的几个算法

    算法分类 快速排序算法 深度优先算法 广度优先算法 堆排序算法 归并排序算法

  • 算法学习(1)-排序算法

    八大排序算法九大排序算法再总结[经典排序算法][集锦][直观学习排序算法] 视觉直观感受若干常用排序算法 快速排序...

  • 经典排序算法总结

    经典排序算法集锦 冒泡法 排序算法入门之冒泡排序 排序算法入门之冒泡排序优化

  • 前端算法学习-第一篇

    冒泡排序算法 冒泡排序算法是最慢的排序算法之一,也是最容易实现的排序算法。之所以叫冒泡排序是因为使用这种算法排序时...

  • 七大排序算法之冒泡排序

    七大排序算法之冒泡排序 @(算法笔记)[排序算法, 冒泡排序, C++实现] 冒泡排序介绍 冒泡排序是七大排序算法...

  • 算法-选择排序

    算 法:选择排序算法时间复杂度: 选择排序算法概述 选择排序伪代码 选择排序实现 选择排序算法概述 排序算法有许...

  • 浅谈排序算法

    排序算法有很多种,今天先谈谈一些简单的排序算法。包括桶排序、冒泡排序和快速排序算法。后期总结各种排序算法。 桶排序...

  • 线性排序

    桶排序、计数排序、基数排序 一、线性排序算法介绍 1.线性排序算法包括桶排序、计数排序、基数排序。2.线性排序算法...

  • 算法4:插入排序和选择排序算法的比较

    排序算法列表电梯: 选择排序算法:详见 《算法4》2.1 - 选择排序算法(Selection Sort), Py...

网友评论

      本文标题:排序算法

      本文链接:https://www.haomeiwen.com/subject/jjynbctx.html