直接插入排序的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;}