题目描述
明明先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其他相同的数去掉。而后再把这些数从小到大排序。请你协助明明完成“去重”与“排序”的工做(同一个测试用例里可能会有多组数据)。
输入描述:
输入多行,先输入随机整数的个数,再输入相应个数的整数
输出描述:
返回多行,处理后的结果算法
思路:能够转换思路,先经过快速排序算法对数据进行排序,而后再有序表中进行去重操做。
解法(C语言版):ide
#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]); } }