zoukankan      html  css  js  c++  java
  • 直接插入排序

    1、算法思想:将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增加1的有序表。
            假设待排序的数据是数组A[1….n]。初始时,A[1]自成1个有序区,无序区为A[2….n]。在排序的过程中,依次将A[i] (i=2,3,….,n)从后往前插入到前面已排好序的子数组A[1,…,i-1]中的适当位置,当所有的A[i] 插入完毕,数组A中就包含了已排好序的输出序列。
    2、代码实现:
    public void sort(int[] list,int size){
        for (int i = 1;i<size;i++) {
    int temp = list[i]; //要插入的数值
    for (int j = 0;j<i;j++){
    if (temp<list[j]){
    for (int m = i-1;m>=j;m--){
    list[m+1] = list[m]; //依次顺移
    }
    list[j] = temp ;
    break; //插入后退出循环(记得已经找到并插入后要退出)
    }
    }
    }
    }
    3、复杂度分析:1.当要排序的表本身就是有序的,则没有移动记录,时间复杂度为O(N)2.当要排序的表是逆序时,需要比较N+N-1+...+2=(N+2)(N+1)/2次,如果排序记录是随机的,根据概率相同原则,则平均比较和移动次数约为N^2/4次。因此,直接插入排序法的时间复杂度为O(N^2).
  • 相关阅读:
    Jmeter使用csv文件读取测试数据
    postman入门教程
    VS code 踩坑
    一些安装链接
    Maven笔记
    c++
    更新windows补丁时一直卡在搜索更新
    Java程序设计(第二版)复习 第三章
    Java程序设计(第二版)复习 第二章
    CSS基础一
  • 原文地址:https://www.cnblogs.com/chump-zwl/p/6953492.html
Copyright © 2011-2022 走看看