#include<iostream>
#include<cstring>
#include<cstdlib>
#include<time.h>
#include<cstdio>
using namespace std;
// 生成元素为随机数的数组
void Random(int a[],int n)
{
int i=0;
srand( (unsigned)time( NULL ) );
while(i<n)
{
a[i++]=rand();
}
}
void InsertSort(int a[], int n)
{
int i, j, temp;
for (i = 1; i < n; i++)
{
temp = a[i];//这个是未排序数据的第一个,要把它插入到合适的位置
for (j = i-1; j >= 0 && temp < a[j]; j--)//a[j]是排序区的最后一个数据
a[j+1] = a[j];//a[j]是排序区的最后一个数据
//第一次循环式,a[j+1] 即a[i]的位置因为后移而被占据,但是他有备份
if(j!=(i-1)) /*第i个数字比前面的都大,不需要重新插入*/
{
a[j+1]=temp;
}
/*当跳出循环时,说明temp >= a[j],循环体未执行,上一个循环的执行
结果是a[j+2] = a[j+1],a[j+1]位置已经空出,且a[j]<=temp<a[j+1]
为保持有序,a[j+1] = temp*/
}
}
void print(int a[], int len)
{
int i;
for (i = 0; i < len; i++)
printf("%6d ", a[i]);
printf("\n");
}
int main()
{
int a[30] = {0};
Random(a,30);
print(a,30);
InsertSort(a, 30);
cout<<"------------------------------------"<<endl;
print(a,30);
return 0;
}
直接插入排序的C++实现及随机数组的产生方法
最新推荐文章于 2022-07-28 09:23:17 发布