排序--插入排序

  插入排序是一种从序列左端开始依次对数据进行排序的算法。在排序过程中,左侧的数据陆续归位,而右侧留下的就是还未被排序的数据。插入排序的思路就是从右侧的未排序区域内取出一个数据,然后将它插入到已排序区域内合适的位置上

 

 

 

 

 

 

 

 

 

 

 

 

 

 解说

  在插入排序中,需要将取出的数据与其左边的数字进行比较。就跟前面讲的步骤一样,如果左边的数字更小,就不需要继续比较,本轮操作到此结束,自然也不需要交换数字的位置。然而,如果取出的数字比左边已归位的数字都要小,就必须不停地比较大小,交换数字,直到它到达整个序列的最左边为止。具体来说,就是第 k 轮需要比较 k -1 次。因此,在最糟糕的情况下,第 2 轮需要操作 1 次,第 3 轮操作 2 次……第 n 轮操作 n -1次,所以时间复杂度和冒泡排序的一样,都为 O(n2)。和前面讲的排序算法一样,输入数据按从大到小的顺序排列时就是最糟糕的情况

public static void main(String[] args) {

        int arr[] = {7, 5, 3, 2, 4};

        // 插入排序
        for (int i = 1; i < arr.length; i++) {
            // 外层循环,从第二个开始比较
            for (int j = i; j > 0; j--) {
                // 内存循环,与前面排好序的数据比较,如果后面的数据小于前面的则交换
                if (arr[j] < arr[j - 1]) {
                    int temp = arr[j - 1];
                    arr[j - 1] = arr[j];
                    arr[j] = temp;
                } else {
                    //如果不小于,说明插入完毕,退出内层循环
                    break;
                }
            }
        }
    }

 

posted on 2021-06-17 20:05  胡子就不刮  阅读(44)  评论(0编辑  收藏  举报

导航