编号 题目 状态 分数 总时间 内存 代码 / 答案文件 提交者 提交时间
#20172 #1. 快速排序 Accepted 100 30 ms 704 K C / 1.6 K 192024212670 2024-12-08 22:44:52
显示原始代码
#include <stdio.h>
#include <stdlib.h>

// 快速排序的分区函数
int partition(int arr[], int low, int high) {
    int pivot = arr[high];  // 选择数组的最后一个元素作为基准
    int i = low - 1;        // i 是较小元素的索引

    for (int j = low; j < high; j++) {
        if (arr[j] < pivot) {  // 如果当前元素小于基准
            i++;               // 增加较小元素索引
            // 交换 arr[i] 和 arr[j]
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }

    // 把基准元素放到正确的位置
    int temp = arr[i + 1];
    arr[i + 1] = arr[high];
    arr[high] = temp;

    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);
    }
}

// 打印数组
void printArray(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main() {
    int n;

    // 读取数据个数
    scanf("%d", &n);

    int* arr = (int*)malloc(n * sizeof(int));  // 动态分配内存

    // 读取要排序的数字
    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }

    // 调用快速排序
    quickSort(arr, 0, n - 1);

    // 输出排序后的结果
    printArray(arr, n);

    free(arr);  // 释放内存
    return 0;
}
子任务 #1
Accepted
得分:100
测试点 #1
Accepted
得分:100
用时:30 ms
内存:704 KiB

输入文件(2.in

100000
548813502 592844616 715189364 844265744 602763370 857945619 544883177 847251737 423654796 62
<988624 bytes omitted>

答案文件(2.out

4010 20029 24208 32576 46285 55350 60569 72453 73696 99348 140054 145665 150375 163096 166440 186713
<988615 bytes omitted>

用户输出

4010 20029 24208 32576 46285 55350 60569 72453 73696 99348 140054 145665 150375 163096 166440 186713 187112 200094 201277 206954
<988588 bytes omitted>

系统信息

Exited with return code 0