当前位置: 首页 > 编程笔记 >

插入排序

费承载
2023-03-14
本文向大家介绍插入排序,包括了插入排序的使用技巧和注意事项,需要的朋友参考一下

这种分类技术与卡片分类技术相似,换句话说,我们使用插入分类机制对卡片进行分类。对于这项技术,我们从数据集中拾取一个元素,并移动数据元素以放置一个位置,以便将拾取的元素插入回数据集中。

插入排序技术的复杂性

  • 时间复杂度:最佳情况为O(n),平均情况和最差情况为O(n ^ 2)

  • 空间复杂度:O(1)

输入输出

Input:
The unsorted list: 9 45 23 71 80 55
Output:
Array before Sorting: 9 45 23 71 80 55
Array after Sorting: 9 23 45 55 71 80

算法

insertionSort(array, size)

输入-数据数组,以及数组中的总数

输出&−  排序后的数组

Begin
   for i := 1 to size-1 do
      key := array[i]
      j := i
      while j > 0 AND array[j-1] > key do
         array[j] := array[j-1];
         j := j – 1
      done
      array[j] := key
   done
End

示例

#include<iostream>
using namespace std;

void display(int *array, int size) {
   for(int i = 0; i<size; i++)
      cout << array[i] << " ";
   cout << endl;
}

 void insertionSort(int *array, int size) {
   int key, j;

   for(int i = 1; i<size; i++) {
      key = array[i];//take value
      j = i;

      while(j > 0 && array[j-1]>key) {
         array[j] = array[j-1];
         j--;
      }

      array[j] = key;//insert in right place
   }
}

int main() {
   int n;
   cout << "Enter the number of elements: ";
   cin >> n;
   int arr[n]; //create an array with given number of elements
   cout << "输入元素:" << endl;

   for(int i = 0; i<n; i++) {
      cin >> arr[i];
   }

   cout << "Array before Sorting: ";
   display(arr, n);
   insertionSort(arr, n);
   cout << "Array after Sorting: ";
   display(arr, n);
}

输出结果

Enter the number of elements: 6
输入元素:
9 45 23 71 80 55
Array before Sorting: 9 45 23 71 80 55
Array after Sorting: 9 23 45 55 71 80
 类似资料:
  • 插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 插入排序和冒泡排序一样,也有一种优化算法,叫做拆半插入。 1. 算法步骤 将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一

  • 1. 前言 本节内容是排序算法系列之一:插入排序,主要讲解了插入排序的主体思路,选取了一个待排序的数字列表对插入排序算法进行了演示,给出了插入排序算法的 Java 代码实现,帮助大家可以更好地理解插入排序算法。 2. 什么是插入排序? 插入排序(Insert Sort),是计算机科学与技术领域中较为简单的一种排序算法。 顾名思义,插入排序是通过不断插入待排序的元素完成整个排序过程。插入排序是一种很

  • 插入排序,尽管仍然是 $$O(n^2)$$,工作方式略有不同。它始终在列表的较低位置维护一个排序的子列表。然后将每个新项 “插入” 回先前的子列表,使得排序的子列表称为较大的一个项。Figure 4 展示了插入排序过程。 阴影项表示算法进行每次遍历时的有序子列表。 Figure 4 我们开始假设有一个项(位置 0 )的列表已经被排序。在每次遍历时,对于每个项 1至 n-1,将针对已经排序的子列表中

  • 本文向大家介绍Haskell插入排序,包括了Haskell插入排序的使用技巧和注意事项,需要的朋友参考一下 示例 使用示例: 结果:            

  • 插入排序类似于人类按数字或字母顺序对数据进行排序。例如,让班里的每个学生上交一张写有他的名字、学生证号以及个人简历的索引卡片。学生上交上来的卡片是没有顺序的,但是我想让这些卡片按字母顺序排好,这样就可以很容易地与班级花名册进行对照了。 插入排序,有两个循环。外循环将数组元素挨个移动,而内循环则对外循环选中的元素及它前面的元素进行比较。如果外循环中选中的元素比内循环选中的元素小,那么数组元素会向右移

  • 2. 插入排序 插入排序算法类似于玩扑克时抓牌的过程,玩家每拿到一张牌都要插入到手中已有的牌里,使之从小到大排好序。例如(该图出自[算法导论]): 图 11.1. 扑克牌的插入排序 也许你没有意识到,但其实你的思考过程是这样的:现在抓到一张7,把它和手里的牌从右到左依次比较,7比10小,应该再往左插,7比5大,好,就插这里。为什么比较了10和5就可以确定7的位置?为什么不用再比较左边的4和2呢?因