题目描述
明明先用计算机生成了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]);
}
}
来源:51CTO
作者:Yuanmes
链接:https://blog.51cto.com/13614527/2467199