题解 | #明明的随机数#

明明的随机数

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

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 交换数组中两个元素的值
void swap(int* a, int* b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

// 将数组按照基准值进行划分
int partition(int arr[], int low, int high) {
    int pivot = arr[high];  // 选择最后一个元素作为基准值
    int i = (low - 1);

    for (int j = low; j < high; j++) {
        if (arr[j] < pivot) {
            i++;
            swap(&arr[i], &arr[j]);
        }
    }
    swap(&arr[i + 1], &arr[high]);
    return (i + 1);
}

// 实现快速排序的递归函数
void quickSort(int arr[], int low, int high) {
    if (low < high) {
        int pi = partition(arr, low, high);

        quickSort(arr, low, pi - 1);
        quickSort(arr, pi + 1, high);
    }
}


int main() {
   
    int N;
    scanf("%d", &N);
    int arr[1000] = { 0 };
    // 生成并打印N个随机数并存入数组arr
    for (int i = 0; i < N; i++) {
        scanf("%d", &arr[i]);
    }
    for (int j = 0; j < N; j++)
    {
        for (int k = j+1; k < N; k++)
        {
            if (arr[k] == arr[j])
            {
                for (int l = k; l <= N; l++) 
                {
                    arr[l] = arr[l + 1];   //若后面出现重复的值,数组项向前移动覆盖
                }
                N--;  //数组长度减一
                k--;  //重复值后移一位
            }
                
            
        }
    }

    quickSort(arr, 0, N - 1);
    for (int i = 0; i < N; i++) {
        if (arr[i]) {
            printf("%d\n", arr[i]);
        }
    }
    return 0;

}

全部评论

相关推荐

10-09 22:05
666 C++
找到工作就狠狠玩CSGO:报联合国演讲,报电子烟设计与制造
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务