C++插入排序

选择排序是每次选择出最小的放到已经排好的数组后面,而插入排序是依次选择一个元素,插入到前面已经排好序的数组中间,确保它处于正确的位置,当然,这是需要已经排好的顺序数组不断移动。步骤描述如下:

1.从第一个元素开始,可以认为第一个元素已经排好顺序。
2.取出后面一个元素 n,在前面已经排好顺序的数组里从尾部往头部遍历,假设正在遍历的元素为 nums[i],如果 num[i] > n,那么将 nums[i] 移动到后面一个位置,直到找到已经排序的元素小于或者等于新元素的位置,将 n 放到新腾空出来的位置上。如果没有找到,那么 nums[i] 就是最小的元素,放在第一个位置。
3.重复上面的步骤 2,直到所有元素都插入到正确的位置。

以数组 [98,90,34,56,21] 为例,动态排序过程如下:

1.具体的排序过程如下:
第一次假设第一个元素已经排好,第二个元素 90 往前面查找插入位置,正好查找到 98 的位置插入,第二轮是 34 选择插入位置,选择了第一个元素 90 的位置插入,其后面的元素后移。

第三轮排序则是 56 选择适合自己的位置插入,第四轮是最后一个元素 21 往前查找适合的位置插入。

#include <iostream>
using namespace std;

void insertionSort(int nums[],int size);
void printf(int nums[],int size);

int main() {
    int nums[] = {98,90,34,56,21};
    int size =  sizeof(nums)/sizeof(nums[0]);
    printf(nums,size);
    insertionSort(nums,size);
    return 0;
}

void insertionSort(int nums[],int size) {
    if (nums == NULL) {
      return;
    }
    int index, temp;
    for (int i = 1; i < size; i++) {
      // 当前选择插入的元素前面一个索引值
      index = i - 1;
      // 当前需要插入的元素
      temp = nums[i];
      while (index >= 0 && nums[index] > temp) {
        nums[index + 1] = nums[index];
        index--;
      }
      // 插入空出来的位置
      nums[index + 1] = temp;
      cout<<"第" << i << "轮插入结果:"<<endl;
      printf(nums,size);
    }
  }

void printf(int nums[],int size){
    for (int i = 0; i < size; i++) {
        cout<<nums[i]<<" ";
    }
    cout<<endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值