插入排序法(Insertion Sort)
一,概念
-
自行总结:当前元素小于(大于)前一个元素,则当前元素就插入到前一个元素之前,直到排序完成
-
区别:
- 插入排序:二层循环可以提前结束循环
- 选择排序:二层循环要全部执行
-
时间复杂度:O(n2)
-
特点:如果待排序数组近乎有序,那可以很快结束二层循环,时间复杂度趋于O(n)
二,图示
更接近,插入排序改进方法的逻辑

三,C++实现
main.cpp
#include <iostream>
#include <algorithm>
#include "SortTestHelper.h"
#include "SelectionSort.h"
using namespace std;
template<typename T>
void insertionSort(T arr[], int n){
for( int i = 1 ; i < n ; i ++ ) {
// 寻找元素arr[i]合适的插入位置(和之前元素进行比较)
// 插入排序的二层循环可以提前结束,但选择排序的二层循环要完整执行找到最小值
// 写法1
for( int j = i ; j > 0 ; j-- )
if( arr[j] < arr[j-1] )
swap( arr[j] , arr[j-1] );
else
break;
// 写法2
// for( int j = i ; j > 0 && arr[j] < arr[j-1] ; j -- )
// swap( arr[j] , arr[j-1] );
}
return;
}
int main() {
int n = 10000;
cout<<"Test for Random Array, size = "

本文介绍了插入排序的概念,强调其在近乎有序数组中的高效性,并通过图示辅助理解。接着,提供了C++和JavaScript的实现示例,对比了插入排序与选择排序的时间复杂度。在讨论中,提出了插入排序的改进方法,减少交换赋值次数,提高效率。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



