3、插入排序
思路分析
先给定一个乱序的数组int arr[10] = {1, 2, 66, 33, 88, 100, 18, 78, 12, 321};
先假定一个数组是有序的,然后查找一个位置(前一个小于这个数,后一个大于这个数),这个时候把这个位置存这个数,这个数后的有序序列集体后移
第一轮:1,2,33,66,88,100,18,78,12,321
第二轮:1,2,18,33,66,88,100,78,12,321
第三轮:1,2,18,33,66,78,88,100,12,321
第四轮:1,2,12,18,33,66,78,88,100,321
排序完毕。
#include <bits/stdc++.h>
using namespace std;
void insert_sort(int* a, int len);
void print(int* a, int len, bool isBefore= true);
int main(){
int arr[10] = {1, 2, 66, 33, 88, 100, 18, 78, 12, 321};
print(arr, 10);
cout << "插入排序:" << endl;
insert_sort(arr, 10);
print(arr, 10, false);
return 0;
}
void insert_sort(int* a, int len){
int temp;
int j;
for(int i = 1; i < len;i++){//从第二个开始,到最后一插入到有序数组中
//临时存储待插数据
temp = a[i];
j = i - 1;
while(j >= 0 && a[j] > temp) {//j的范围,只有a[j]大于temp才往后覆盖
a[j + 1] = a[j];
j--;
}
a[j+1] = temp;//temp覆盖回来
}
}
void print(int* a, int len, bool isBefore){
if(isBefore)
cout << "before sort:";
else
cout << "after sort:";
for(int i = 0; i< len; i++){
cout << a[i] << " ";
}
cout << endl;
}
2593

被折叠的 条评论
为什么被折叠?



