一、要求
产生五个随机数,并由小到大输出,要求采用边写入边排序方法
二、源码
1 #include <stdio.h> 2 #include <stdlib.h> 3 int main(int argc, const char * argv[]) { 4 //定义一个随机数数组 5 int ranArr[5] = {}; 6 7 for (int i = 0; i < 5; i ++) { 8 int temp = arc4random() % 9 + 1; 9 10 if (i == 0) { 11 //第一次直接赋值 12 ranArr[0] = temp; 13 14 } else{ 15 //判断大小 16 int j = 0; 17 for (; j < i; j ++) { 18 //如果temp小于ranArr[j],则将temp插入在j位置 19 if (temp < ranArr[j]) { 20 //从后往前变换 21 for (int k = i; k > j; k --) { 22 ranArr[k] = ranArr[k - 1]; 23 } 24 /* ranArr[j] = temp; 合并*/ 25 //因为i - 1都排序好了,只判断一次就行 26 break; 27 28 } 29 } 30 31 ranArr[j] = temp; 32 /*合并 33 //如果j == i,则temp为最大数 34 if (j == i) { 35 ranArr[j] = temp; 36 } 37 */ 38 } 39 } 40 41 //打印结果 42 for (int i = 0; i < 5; i ++) { 43 printf("%d ", ranArr[i]); 44 } 45 printf("\n"); 46 47 return 0; 48 }
三、运行结果
四、重难点
本demo难点在于边插入边排序,使用三重for循环,产生的随机数不是直接赋值,而是经过比较才赋值
注意插入操作是从后往前操作。设元素个数是i,插入位置是j,要插入的值为temp,代码如下:
1 for (int k = i; k > j; k ==) { 2 ranArr[k] = ranArr[k -1]; 3 4 } 5 ranArr[j] = temp;
最后的合并操作是写完发现代码相同,考虑是否可以合并以减少代码量