【華爲機試練習】明明的隨機數

題目描述
明明先用計算機生成了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]);
    }
}
相關文章
相關標籤/搜索