如何在 C 中为整数数组创建快速排序

问题描述 投票:0回答:1

我正在尝试在 C 中设计一个函数快速排序,它以一种体面的方式对整数数组进行排序。

我正在尝试这段代码: print_arr 是一个打印数组所有元素的函数。 交换对数组元素的更改 partition 更改数组,使枢轴位于上部元素和下部元素之间,并返回枢轴所在的位置。 快速排序是对数组进行排序的函数。 Main 是我创建要排序的数组的主要功能。

#include <stdlib.h>
#include <stdio.h>

void print_arr(int arr[], int lon) {
    for (int i = 0; i < lon; i++) {
        printf("%d ", arr[i]);
    }
}

void swap(int *a, int *b) {
    int *temp = a;
    a = b;
    b = temp;
}

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

    return (i);
}

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 arr[5] = {3, 4, 1, 2, 5};
    quicksort(arr, 0, 5);

    print_arr(arr, 5);
    puts("");

    return 0;
}

所以我期待这样的输出:

1 2 3 4 5
但我得到:
3 4 1 2 5

arrays c sorting integer quicksort
1个回答
1
投票
void swap(int *a, int *b) {
    int *temp = a;
    a = b;
    b = temp;
}

上面的代码只是交换指针,并保持指向数据不变。应该改写为:

void swap (int *a, int *b) 
{
    int tmp = *a;
    *a = *b;
    *b = tmp;
}
© www.soinside.com 2019 - 2024. All rights reserved.