【黑马程序员武汉中心】插入排序

一、分类

1、直接插入排序

2、希尔插入排序

1、直接插入排序

A.含义

讲一个记录插入到已经排序好的有序列表当中。

B.步骤

a.sorted数组的第0个位置没有放入数据

b.sorted第二个数据开始处理:如果该数据比前面的数据小.说明该数据需要往前面移动。

1)首先将该数据备份到 sorted0号位置作为"哨兵"

2)然后将该数据的前面那个数据往后移动

3)然后往前搜索,找插入的位置

4)找到插入的位置之后,第0位置的那个数据插入到对应的位置。

2、希尔排序(缩小增量排序 diminishing increment sort

A.含义

先将整个等待排序的代码分割成为若干的子序列,分别进行直接插入排序,等待整个序列中记录基本有序的时候,再对

全体进行一次直接插入排序

B.插入排序代码

main()方法的写法

public static void main(String[] args) {
 Random r = new Random();
 int size = 10;
 int[] array = new int[size];
 //排序前,赋值并且打印
 System.out.println("排序前:");
 for (int i = 0; i < array.length; i++) {
 array[i] = r.nextInt(100);
 System.out.print(array[i]+" ");
 }
 System.out.println();
 //调用排序方法
 insertSort(array);
 //排序后,打印输出结果
 System.out.println("排序后:");
 for (int i = 1; i < array.length; i++) {
 System.out.print(array[i]+" ");
 }
 System.out.println();
}

 

排序方法的写法

//直接插入排序的方法
public static void insertSort(int[] arr){
 int len = arr.length;
 for (int i = 2; i < len; i++) {
 if(arr[i]<arr[i-1]){
 arr[0] = arr[i];
 arr[i] = arr[i-1];
 int insertPosition = 0;
 for (int j = i-2; j >=0; j--) {
 if (arr[j]>arr[0]){
 arr[j+1] = arr[j];
 }else{
 insertPosition = j+1;
 break;
 }
 }
 arr[insertPosition] = arr[0];
 }
 }
}

 

运行结果

排序前:
2 68 46 58 81 61 18 27 54 43 
排序后:
18 27 43 46 54 58 61 68 81

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值