题解 | #明明的随机数#

明明的随机数

https://www.nowcoder.com/practice/3245215fffb84b7b81285493eae92ff0

#include <stdio.h>

void QuickSort(int x[], int left, int right){
    /*
    快速排序算法。
    */
    int begin = left;
    int end = right;
    int key = right;
    while(left < right){
        while(x[left] <= x[key] && left < right){
            left++;
        }
        while(x[right] >= x[key] && left < right){
            right--;
        }
        int temp = x[left];
        x[left] = x[right];
        x[right] = temp;
    }
    int temp = x[left];
    x[left] = x[key];
    x[key] = temp;
    if(left-1 > begin){
        QuickSort(x, begin, left-1);
    }
    if(left+1 < end){
        QuickSort(x, left+1, end);
    }
}

int main() {
    /*
    解题思路:首先使用哈希表读入非重复的元素,然后使用快速排序算法进行排序。
    */
    // 获得随机数的个数 N。
    int N;
    scanf("%d", &N);
    // 建立对应的哈希表读入非重复的元素。
    int Hash[1000];
    // 初始化哈希表。
    for(int i = 0; i < 1000; i++){
        Hash[i] = 0;
    }
    // 待排序序列。
    int x[N];
    int length = 0;
    // 读入随机数序列。
    int temp = 0;
    for(int i = 0; i < N; i++){
        scanf("%d", &temp);
        // 读入的这个数字在之前没有出现过。
        if(Hash[temp-1] == 0){
            Hash[temp-1] = 1;
            x[length++] = temp;
        }
    }
    // 快速排序。
    QuickSort(x, 0, length-1);
    for(int i = 0; i < length; i++){
        printf("%d\n", x[i]);
    }
    return 0;
}

这道题个人感觉主要是手搓快速排序比较难,如果使用更为简单但是时间复杂度更高的内部排序算法,例如冒泡排序等可能难度没有那么高。

全部评论

相关推荐

犹豫的小狐狸刷了100道题:你是我在牛课上见到的最漂亮的女孩了
点赞 评论 收藏
分享
吴offer选手:HR:我KPI到手了就行,合不合适关我什么事
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务