直接插入排序的C++实现及随机数组的产生方法

来源:互联网 发布:见过最骚的女生知乎 编辑:程序博客网 时间:2024/05/13 00:11
#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;}