美文网首页石同尘的Java笔记程序员
插入排序示范-从小到大 关键操作“从左至右后数插入前面数组”

插入排序示范-从小到大 关键操作“从左至右后数插入前面数组”

作者: 448f984add9e | 来源:发表于2018-11-05 21:10 被阅读4次

插入排序分析:1.后数插入前面的数组中,前面的数组是已经排好序的 2.后数下标为i,前数组最后一个数下标为i-1,用j记录i-1;

假设数组array有array.length个元素

说明:int i,j,temp=0; 其中i用来记录每趟插入数的下标,从1开始到array.length-1结束,共计array.length-1趟,j记录i下标所有前面元素组成数组中的元素下标,i下标从1开始到array.length-1变化,j下标从i-1到可能是负数的情况变化。

假设问题规模为n,即需要排序的数组元素为n个。

第1趟:i下标此时为1,前面数组元素个数为1个,最坏情况需要比较1次,while循环体中移动操作1次,加循环体结束再移动一次,共计移动2次,最好情况while循环体移动操作条件判定一次,不移动

....

第i趟:i下标此时为i,前面数组元素个数为i个,最坏情况需要比较i次,while循环体中移动操作i次,加循环体结束再移动一次, 共计移动i+1次,最好情况while循环体移动操作条件判定1次,不移动

....

第n-1趟(最后一趟):i下标此时为array.length-1,前面数组元素个数为n-1个,最坏情况需要比较n-1次,while循环体中移动操作n-1次,加循环体结束再移动一次, 共计移动n次,最好情况while循环体移动操作条件判定一次,不移动

总计:时间复杂度 while循环体中移动操作最坏情况:1+2+...+n-1=(n-1)(1+n-1)/2, O(n^2);最好情况只有while循环体移动操作条件判定 一次,while循环体中移动操作不执行:1*(n-1)=n-1,O(n)。只需要一个额外空间O(1)。

我个人代码实现:

public class InsertSort {

public static void insertSort(int[] array) {

int i,j,temp=0;

for(i=1;i<array.length;i++) {

temp=array[i];

j=i-1;

while(j>=0&&array[j]>temp) {

array[j+1]=array[j];

j--;

}

array[j+1]=temp;

}

}

public static void main(String[] args) {

int[] array= {6,5,3,2,4,8,9,1};// TODO Auto-generated method stub

System.out.println("排序前:");

for(int i=0;i<array.length;i++)

System.out.print(array[i]+" ");

System.out.println();

insertSort(array);

System.out.println("排序后:");

for(int i=0;i<array.length;i++)

System.out.print(array[i]+" ");

}

}

输出结果:

排序前:

6 5 3 2 4 8 9 1

排序后:

1 2 3 4 5 6 8 9

相关文章

  • 插入排序示范-从小到大 关键操作“从左至右后数插入前面数组”

    插入排序分析:1.后数插入前面的数组中,前面的数组是已经排好序的 2.后数下标为i,前数组最后一个数下标为i-1,...

  • 常见排序算法(1)一一插入排序

    插入排序有2种,分别是直接插入排序和希尔排序。 1.直接插入排序:从还没排序的数组里取出一个数,插入到已排序的数组...

  • 一些算法题

    一、插入排序插入排序的思路是,从数组的第二个数开始,向前遍历数组arr,找到arr[i] <= item < ar...

  • 排序算法讲解及代码实现

    共用方法 1. 插入排序 思路:从数组中选中目标元素(一般从第二个元素开始),依次和前面的数对比,边比对边移动数据...

  • 十大排序算法——希尔排序

    主要思想: 基于插入排序,交换不相邻的元素已对数组的局部进行排序,并最终用插入排序将局部有序的数组排序。思想是使数...

  • 02-插入排序(完成)

    插入排序—— 稳点!!! 动态图: 一、概念:   原理:如果数组进行循环得到a,若a比a前面的一个数小(大),则...

  • 排序:希尔排序

    原理 希尔排序是插入排序的升级版。当我们谈论希尔排序时我们先谈下插入排序。已知插入排序是从数组左端开始遍历,将使得...

  • 排序

    插入排序 直接插入排序直接插入排序的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的...

  • 插入排序

    升序排 对数组进行插入排序 对线性表进行插入排序

  • Swift算法俱乐部中文版 -- 插入排序

    目标:从小到大(或从大到小)对数组进行排序。 给你一组数组,将他们排序。插入排序算法的步骤如下: 把未排序的数字放...

网友评论

    本文标题:插入排序示范-从小到大 关键操作“从左至右后数插入前面数组”

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