题目来自51nod,原文链接
题目分析
输入:输入n为数组长度,循环填充n个数据
输出:数组长度n,依次输出升序后的数据
根据题目,先输入n,然后依次输入数据,题目要求是升序排序,很快想到了用最简单的冒泡排序法,时间复杂度为 O(n^2),空间复杂度为O(1)。
解法
#include <stdio.h>
#include <stdlib.h>
int main() {
int n = 0;
scanf("%d", &n);
int *arr = (int*)malloc(n*sizeof(int));
int *p = arr;
for (int i = 0; i < n; i++) {
scanf("%d", p++);
}
// 升序排序
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
//输出长度
printf("%d\r\n", n);
//输出排序后的数组
for (int i = 0; i < n; i++) {
printf("%d\r\n", arr[i]);
}
free(arr);
system("pause");
return 0;
}