问题描述
给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200
输入格式
第一行为一个整数n。
第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。
输出格式
输出一行,按从小到大的顺序输出排序后的数列。
- 冒泡排序
#includeint main() { int n, temp, i, j, k; scanf_s("%d", & n); int a[200]; for (i = 0; i < n; i++) { scanf_s("%d", &a[i]); } for (i = 0; i < n - 1; i++) { for (j = 0; j < n - i - 1; j++) { if (a[j] > a[j+1]) { temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } } for (k = 0; k < n; k++) { printf("%d ", a[k]); } return 0; }
- 选择排序
#includeint main() { int n, temp, i, j, k; scanf_s("%d", & n); int a[200]; for (i = 0; i < n; i++) { scanf_s("%d", &a[i]); } for (i = 0; i < n - 1; i++) { for (j = i + 1; j < n; j++) { if (a[i] > a[j]) { temp = a[i]; a[i] = a[j]; a[j] = temp; } } } for (k = 0; k < n; k++) { printf("%d ", a[k]); } return 0; }
优化:通过设置k储存最小值的位置,以减少交换次数
#includeint main() { int n, temp, i, j, k; scanf_s("%d", & n); int a[200]; for (i = 0; i < n; i++) { scanf_s("%d", &a[i]); } for (i = 0; i < n - 1; i++) { k = i; for (j = i + 1; j < n; j++) { if (a[k] > a[j]) { k = j; } } temp = a[k]; a[k] = a[i]; a[i] = temp; } for (k = 0; k < n; k++) { printf("%d ", a[k]); } return 0; }
祝你学习快乐!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)