java中的插入排序法

插入排序法(顾名思义,拿出数组中的一个元素跟其他元素比较,进行插入)

将数组中的第二个元素取出来跟前面的元素比较,如果前面的元素比较大就将两者交换(第一个元素不用比较,再前面没有元素)。第三个元素就跟第二第一的元素比较。以此类推。

实现代码

import java.util.*;
public class InsertionSort {
public static void main(String[] args) {
int[] arry={60,5,20,15,35,25};         //6
int temp;
int pre, cur;
   for (int i=1;i<arry.length;i++) {
       pre=i-1;          //arry[pre] 是前一个数组元素
       cur=arry[i];     //给cur赋于arry[i]的值,将cur当做要插入的元素
       while (pre>=0&&arry[pre]>cur) {  //如果pre>=0并且arry[i-1]>arry[i]
                                                          //(就是前一个的数组大于后一个数组)
           arry[pre+1]=arry[pre];                  //如果要插入的元素小于第j个元素,就将第j个元素向后移动
           pre--;                                             //跟再前一个数组元素比较
       }
       arry[pre+1]=cur;                               // 直到要插入的元素不小于第i-1个元素,将cur插入到数组中
   }
System.out.println(Arrays.toString(arry));
}

}

时间复杂度

当最好的情况,也就是要排序是有序的,此时只有数据比较,没有数据移动,时间复杂度为O(n)。(例如: 5 10 15 20 30 60) 

当最坏的情况,即待排序的表是逆序的情况, 时间复杂度O(n^2) ,直接插入排序法比冒泡和简单选择排序的性能要好一些。

猜你喜欢

转载自blog.csdn.net/qq_41024101/article/details/80992186