插入排序
今天在写pat乙级题的时候第一次听说插入排序(我一直都是孤陋寡闻,大家谅解^_^)。
插入排序通过对未排序的数据逐个插入合适的位置而完成排序的工作。思路简单,使用的也比较多~。
插入排序算法通过比较和插入来实现排序,其排序流程如下:
(1)first,对数组的前两个数据进行从小到大排序。
(2)接着将第三个数据与排好的两个数据进行比较,将第三个数据插入到合适的位置。
(3)然后将第四个数据插入到已排好序的前三个数居中。
(4)不断重复~知道将最后一个数据插入合适位置。
(╯▽╰),举一个例子:
初始数据:118 101 105 127 112
一次排序:101 118 105 127 112
二次排序:101 105 118 127 112
三次排序:101 105 118 127 112
四次排序:101 105 112 118 127
(~ ̄▽ ̄)~:上代码:
#include <bits/stdc++.h>
#define SIZE 10//数组大小;
using namespace std;
void InsertionSort(int *a,int len) {
int i,j,t,h;
for(i=1; i<len; ++i) {
t=a[i];
j=i-1;
while(j>=0&&t<a[j]) {
a[j+1]-a[j];
j--;
}
a[j+1]=t;
cout<<"第"<<i<<"步排序的结果:";
for(h=0; h<len; h++) {
cout<<a[h]<<" ";
}
cout<<endl;
}
}
int main() {
int arr[SIZE],i;
// 随机数生成;
srand(time(NULL));
for(i=0; i<SIZE; ++i) {
arr[i]=rand()/1000+100;
}
cout<<"排序前: "<<endl;
for(i=0; i<SIZE; ++i) {
cout<<arr[i]<<" ";
}
cout<<endl;
InsertionSort(arr,SIZE);//排序;
for(i=0; i<SIZE; ++i) {
cout<<arr[i]<<" ";
}
cout<<endl;
return 0;
}
程序执行如图: