C++简单插入排序算法
插入排序把整个待排序序列分成了两个部分,即已排序部分和未排序部分,每次都从未排序部分取第一个元素插入到已排序部分。



对于一个连续的数组序列,不妨让数组第一个位置的元素为已排序元素,从1开始进行插入排序,用一个变量j指向该需要进行插入排序的元素的位置,用一个变量temp来临时存储需要进行插入排序的元素即[0,j-1]都是已排序元素。
步骤1:从j-1开始从后往前查找合适插入的位置,此时的j位置相当于一个空位置。
步骤2:如果temp < j-1位置元素,就将j-1这个位置的元素移到j这个空位置,并将空位置更新为j-1,即j=j-1
步骤3:重复步骤1,2,直到j到达已排序序列的最前端或找到j-1的位置使得temp > 这个位置的元素,然后将temp插入到j位置。
#include<cstdio>
#include<iostream>
using namespace std;
void insertSort(int array[],int length){
for(int i = 1;i < length;i++){
int temp = array[i]; //存储当前需要插入的元素
int j = i;
//从当前需要进行插入排序的这个元素的这个位置开始,每次都将这个元素与j的前一个位置的元素进行比较
//如果小于它,则将j前一个位置的元素移到j的位置,再把j向前移动一个位置
//此时j位置相当于一个空位置,就是最终需要进行插入的位置
while(j>0 && temp < array[j-1]){
array[j] = array[j-1];
j--;
}
array[j] = temp;
}
}
int main(){
int array[] = {2,3,4,5,1,65,22};
int length = sizeof(array)/sizeof(int);
insertSort(array,length);
for(int i =0; i< 7;i ++){
printf("%d ",array[i]);
}
printf("\n");
return 0;
}

浙公网安备 33010602011771号