题解 | #明明的随机数#
明明的随机数
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; }