我正在尝试在 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
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;
}