用c语言写一个程序实现一个快速排序
时间: 2023-07-01 07:17:31 浏览: 176
ulink2,快速排序算法c语言可运行源码,c语言程序
好的,以下是 C 语言实现快速排序的示例代码:
```c
#include <stdio.h>
void quick_sort(int arr[], int left, int right) {
int i, j, pivot, tmp;
if (left < right) {
pivot = left;
i = left;
j = right;
while (i < j) {
while (arr[i] <= arr[pivot] && i < right) i++;
while (arr[j] > arr[pivot]) j--;
if (i < j) {
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
tmp = arr[pivot];
arr[pivot] = arr[j];
arr[j] = tmp;
quick_sort(arr, left, j - 1);
quick_sort(arr, j + 1, right);
}
}
int main() {
int arr[] = {5, 2, 7, 1, 3, 6, 4};
int len = sizeof(arr) / sizeof(arr[0]);
int i;
printf("Before sorting:\n");
for (i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
quick_sort(arr, 0, len - 1);
printf("After sorting:\n");
for (i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
在这段代码中,我们定义了一个 `quick_sort` 函数来实现快速排序,该函数接受一个整数数组、待排序区间的左右下标。在函数中,我们首先选择序列的第一个元素为基准值 `pivot`,然后使用两个指针 `i` 和 `j` 分别从左右两端扫描序列。当 `arr[i]` 大于等于基准值并且 i 小于右端点,i 继续向右移动;当 `arr[j]` 小于基准值时,j 继续向左移动。当 i 和 j 交错时,将基准值和 `arr[j]` 交换,完成一次划分。接着,我们递归地对左右两个子序列进行快速排序,直到排序完成。
在 `main` 函数中,我们首先定义一个整数数组 `arr`,并输出排序前的数组元素。然后,我们调用 `quick_sort` 函数对数组进行排序,并输出排序后的结果。
希望能够帮到您!
阅读全文