插入排序
没事喜欢看看数据结构和算法,增加自己对数据结构和算法的认识,同时也增加自己的编程基本功。插入排序是排序中比较常见的一种,理解起来非常简单。现在比如有以下数据需要进行排序:
10 3 8 0 6 9 2
当使用插入排序进行升序排序时,排序的步骤是这样的:
10 3 8 0 6 9 2 // 取元素3,去和10进行对比
3 10 8 0 6 9 2 // 由于10比3大,将10向后移动,将3放置在原来10的位置;再取8与前一个元素10进行对比
3 8 10 0 6 9 2 // 同理移动10;然后8再和3比,8大于3,所以不再移动;如此重复下去
……
0 2 3 6 8 9 10
也就是说,我们每一次取一个元素,都要将该元素与之前已经排序好的元素进行比较。
插入排序的最差时间复杂度为O(n^2)。同时,该算法不需要开辟额外的空间,都是在原空间上进行移动操作。
代码实现
#include <iostream> using namespace std; void InsertSort(int arr[], int length) { int temp; for (int i = 1; i < length; ++i) // 从数组中的第二个元素开始 { temp = arr[i]; // 记录当前的元素 int j = i - 1; while (j >= 0 && temp < arr[j]) // 将当前元素与之前的已经排序好的序列元素进行挨个比较 { arr[j + 1] = arr[j]; // 已经排序好的序列整体向后移动 --j; } arr[j + 1] = temp; // 插入当前的元素 } } int main() { int arr[10] = {9, 2, 8, 2, 3, 2, 4, 10, 34, 5}; InsertSort(arr, 10); for (int i = 0; i < 10; ++i) { cout<<arr[i]<<" "; } cout<<endl; return 0; }
主要内容:插入排序算法的具体实现插入排序算法可以对指定序列完成升序(从小到大)或者降序(从大到小)排序,对应的时间复杂度为 。 插入排序算法的实现思路是:初始状态下,将待排序序列中的第一个元素看作是有序的子序列。从第二个元素开始,在不破坏子序列有序的前提下,将后续的每个元素插入到子序列中的适当位置。 举个简单的例子,用插入排序算法对 {14, 33, 27, 10, 35, 19, 42, 44} 实现升序排序的过程如下: 1)
JavaScript算法-插入排序 插入排序 插入排序有两个循环,外循环将数组元素挨个移动,而内循环则对外循环中选中的元素及它后面的那个元素进行比较。如果外循环中选中的元素比内循环中选中的元素小,那幺数组会向右移动,为内循环中的这个元素腾出位置。 function insertionSort() { var temp,inner; for (var outer = 1; outer <=
本文向大家介绍JS折半插入排序算法实例,包括了JS折半插入排序算法实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS折半插入排序算法。分享给大家供大家参考,具体如下: 希望本文所述对大家JavaScript程序设计有所帮助。
本文向大家介绍python插入排序算法实例分析,包括了python插入排序算法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python插入排序算法。分享给大家供大家参考。具体如下: 另外一个版本: 希望本文所述对大家的Python程序设计有所帮助。
本文向大家介绍Java实现直接插入排序和折半插入排序算法示例,包括了Java实现直接插入排序和折半插入排序算法示例的使用技巧和注意事项,需要的朋友参考一下 直接插入排序 1 排序思想: 将待排序的记录Ri插入到已经排好序的记录R1,R2,……,R(N-1)中。 对于一个随机序列而言,就是从第二个元素开始,依次将这个元素插入到它之前的元素中的相应位置。它之前的元素已经排好序。 第1次排序:将第2个
本文向大家介绍ruby实现的插入排序和冒泡排序算法,包括了ruby实现的插入排序和冒泡排序算法的使用技巧和注意事项,需要的朋友参考一下 1、插入排序 2、冒泡排序