Menu
CoddyTech

插入排序

Coddy C++ 数组 课程的第 14 课,共 26 课。

插入排序也是一种排序算法,时间复杂度同样为 O(n2),但比冒泡排序稍微优化了一些。

在这个算法中,数组分成两部分。一部分是已排序的,另一部分是未排序的。我们从未排序的数组中取出一个元素,并将它放入已排序的数组中的正确位置。

重复这个过程,直到所有元素都排好序。

 

1. 假设我们有一个数组 {8,4,1,5}。把第一个元素视为已排序,其余元素视为未排序。开始时,第 0 个元素被视为已排序。

2. 创建一个临时变量,并将第 (i) 个元素(这里是 4)放入其中。将 temp 与当前已排序的数组(此时只有 8)进行比较。由于 4<8, 将已排序的数组向右移动,直到 4 到达正确的位置。在这种情况下,8 需要移动一次。现在,已排序数组的长度变为 2。

3. 重复这个过程,直到整个数组都排好序。



for(int i=1;i<n;i++){           //从第一个元素开始,因为我们认为第 0 个元素已经排好序。
    int temp=arr[i];
    
    int j=i-1;                  //检查它左侧的所有元素。 
    
    while(arr[j]>temp && j>=0){ //只要左侧元素大于 temp,就将其右移,直到第一个元素。
      arr[j+1]=arr[j];          //将元素向右移动一位。
      j--;                      
    }
    
    arr[j+1]=temp;              //将 temp 放到正确的位置。
  
}

 

 

 

插入排序可视化

插入排序可视化工具

 

challenge icon

挑战

给定一个数组,使用插入排序对其进行排序,并判断更新后的数组是否为等差数列。如果是等差数列,则返回 true,否则返回 false。

 

等差数列是一个相邻元素之间的差值恒定的序列。

示例:10,20,30,40,...

 

亲手试试

#include<iostream>
#include<vector>
using namespace std;

bool AP(vector<int>arr, int n){
   
     //Code here

}

C++ 数组中的所有课

自己练习: C++ 在线编译器