基于插入排序的算法实现(只是实现自己最初的想法)

这次排序算法的设计思想是从一个数组的1索引开始,进行数组的遍历,并且一直确保正在遍历的索引值之前的数据是有序的,每次遍历一个数据时,将其放置到合适的位置上即可,但是该算法的判断条件过多,会显得比较麻烦,且每次从后往前找到合适的位置时,都要平均将数组的一半大小的数据进行移动,因此,这次代码的实现仅仅是个人想法的实现.

外层循环用 i 去遍历整个数组,内层循环用j从后往前判断array[j]与array[i]的大小关系

该算法的弊端需要判断三种不同的情况,处理结果也不完全相同,为了简化代码,合并其中注释的条件,设置flag进行条件判断

代码如下:

import java.util.Arrays;

public class InsertionSort {
    public static void insertSort(int[] array){
        out: for (int i =1;i<array.length;i++){
            int temp1 = array[i];
            for(int j =i-1;j>=0;j--){
                //在左侧找到比基准值小的数据,说明它的下一个数据就应该是array[i]的位置,
                 //在该条件下,又应该判断是否进行值交换(即是否二者相邻,从而确定要不要进行将arra[j+1] = temp1)
                if((array[j]<temp1)) {
                    boolean flag = false;
                    for (int k = i - 1; k > j; k--) {
                        array[k + 1] = array[k];
                        flag = true;
                    }
                    if (flag) {
                        array[j+1] = temp1;
                    }
                    System.out.println(Arrays.toString(array));
                    continue out;
                }
                //若是左侧j遍历到0索引位置,且array[j]>temp1,说明该值应该放置在0索引位置,则需要将左侧的数据全部进行移动一位
                if ((j==0&&array[j]>temp1)){
                    for (int k = i - 1; k >=j; k--) {
                        array[k + 1] = array[k];
                    }
                    array[0] = temp1;
                    System.out.println(Arrays.toString(array));

                }
               // 若是左侧j遍历到0索引位置,且array[j]<temp1,说明该值应该放置在0索引位置,则需要将左侧的数据全部进行移动一位
//                if ((j==0&&array[j]<temp1)){
//                    for (int k = i - 1; k >j; k--) {
//                        array[k + 1] = array[k];
//                    }
//                    array[j+1] = temp1;
//                    System.out.println(Arrays.toString(array));
//                }

            }
        }
    }


    public static void main(String[] args) {
        int[]  a ={-1,1,1,-9,-5,4,-10,0,8,-9,0,3,2};
        insertSort(a);
        System.out.println(Arrays.toString(a));
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值