插入排序实现如下:
#include <iostream>
#include <cwindows>
#include <string>
using namespace std;
//控制排序顺序的指示码
enum CompType{
_Greater_=0,//从大到小排序
_Less_=1//从小到大排序
};
//插入排序
template<typename DataType>
void insertSort(DataType *array,int len,int comp){
//从大到小排序
if(comp == CompType::_Greater_){
//从索引1遍历到数组的最后一位,依次将每个项都插入到各自相应的位置
for(int i = 1;i <= len - 1;++i){
DataType temp = array[i];
int j = 0;
//将当前i索引指向的元素插入到相应的位置
for(;j != i+1;++j){
if(temp <= array[i-1-j]){
array[i-j] = temp;
break;
}
else{
array[i-j] = array[i-1-j];
continue;
}
}
//当i索引的项应该插入到数组的首项位置时,进行插入
if(j == i + 1){
array[0] = temp;
}
}
}
//从小到大排序
if(comp == CompType::_Less_){
//从索引1遍历到数组的最后一位,依次将每个项都插入到各自相应的位置
for(int i = 1;i <= len - 1;++i){
DataType temp = array[i];
int j = 0;
//将当前i索引指向的元素插入到相应的位置
for(;j != i+1;++j){
if(temp >= array[i-1-j]){
array[i-j] = temp;
break;
}
else{
array[i-j] = array[i-1-j];
continue;
}
}
//当i索引的项应该插入到数组的首项位置时,进行插入
if(j == i + 1){
array[0] = temp;
}
}
}
}
int main(int argc,const char *argv[]){
int array[]={9,8,7,0,3,4,6,4,3,2,1};
insertSort(array,sizeof(array)/sizeof(int),CompType::_Less_);
for(int i = 0;i < sizeof(array)/sizeof(int);++i){
cout<<array[i]<<" ";
}
cout<<endl;
return EXIT_SUCCESS;
}
插入排序的思路:
首先,从左至右依次将数组的各项按照从大到小或从小到大的顺序排好序。
注:插入排序的讲解有点不好用文字描述,所以我暂且不提供讲解,我建议想学习插入排序的小伙伴去网上搜一下有动画的GIF图,这样能比较直观地了解插入排序的实质