题目描述
明明先用计算机生成了 N 个 1 到 1000 之间的随机整数 (N≤1000), 对于其中重复的数字, 只保留一个, 把其余相同的数去掉. 然后再把这些数从小到大排序. 请你协助明明完成 "去重" 与 "排序" 的工作 (同一个测试用例里可能会有多组数据).
输入描述:
输入多行, 先输入随机整数的个数, 再输入相应个数的整数
输出描述:
返回多行, 处理后的结果
思路: 可以转换思路, 先通过快速排序算法对数据进行排序, 然后再有序表中进行去重操作.
解法 (C 语言版):
- #include<stdio.h>
- int Partition(int array[], int low, int high)
- {
- int pivot = array[low];
- while(low <high)
- {
- while(low < high && array[high]>= pivot)
- --high;
- array[low] = array[high];
- while(low < high && array[low] <= pivot)
- ++low;
- array[high] = array[low];
- }
- array[low] = pivot;
- return low;
- }
- void QuickSort(int array[], int low, int high)
- {
- if(low < high)
- {
- int pivotpos = Partition(array, low, high);
- QuickSort(array, low, pivotpos - 1);
- QuickSort(array, pivotpos + 1, high);
- }
- }
- int main()
- {
- int n, i, k;
- int inputArray[1000], outputArray[1000];
- while(scanf("%d", &n) != EOF)
- {
- for(i = 0; i < n; ++i)
- scanf("%d", &inputArray[i]);
- QuickSort(inputArray, 0, n - 1);
- k = 0;
- for(i = 0; i < n; ++i)
- {
- if(inputArray[i] == inputArray[i + 1])
- k++;
- else
- outputArray[i - k] = inputArray[i];
- }
- for(i = 0; i < n - k; ++i)
- printf("%d\n", outputArray[i]);
- }
- }
来源: http://www.bubuko.com/infodetail-3383311.html