#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-02-07 22:16:52 发布