码迷,mamicode.com
首页 > 编程语言 > 详细

图解算法系列之插入排序(优化版)

时间:2018-12-09 20:38:27      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:最大   java   情况   png   图片   假设   c++   lock   ima   

(1)算法描述

对于给定的一个线性空间,遍历考察每一个元素,将当前元素拷贝一份,并将前一个元素拷贝到当前元素的原位置。拷贝出来的元素与前一个元素进行比较,如果满足前一个元素大于或小于当前元素就将当前拷贝出来的元素放到当前位置,否则继续向前比较。

(2)图解算法

技术分享图片

(3)C/C++代码实现

Custom.h

void insertionAdvancedSort(int arr[], int number);

Custom.cpp

void insertionAdvancedSort(int arr[], int number) {
// 一次比较每一个元素
for (int i = 0; i < number; i++) {
// 假设当前的元素就是最大值
int current = arr[i];
int j;
// j > 0表示确保比较的元素没有到头
// arr[j-1] > max表示当前元素max比指定的元素arr[j-1]小
for (j = i; j > 0 && arr[j - 1] > current; j--) {
// 交换元素
arr[j] = arr[j-1];
}
// 当前这个元素与指定的元素交换
arr[j] = current;
}
}

(4)Java代码实现

public class InsertionSortAdvanced {
    public static void sort(int[] arr, int number) {
        for (int i = 0; i < number; i++) {
            int current = arr[i];
            int j;
            for (j = i; j > 0 && arr[j-1] > current; j--) {
                arr[j] = arr[j-1];
            }
            arr[j] = current;
        }
    }
}

(5)时间复杂度分析

在最坏的情况下,时间复杂度仍然是O(n^2)。

图解算法系列之插入排序(优化版)

标签:最大   java   情况   png   图片   假设   c++   lock   ima   

原文地址:http://blog.51cto.com/xvjunjie/2328128

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!