quicksort c语言
时间: 2023-06-01 13:02:12 浏览: 64
以下是C语言实现的快速排序算法:
```c
#include <stdio.h>
void quick_sort(int[], int, int);
int partition(int[], int, int);
int main()
{
int arr[] = {45, 67, 23, 89, 12, 56, 78, 34};
int n = sizeof(arr) / sizeof(arr[0]);
quick_sort(arr, 0, n - 1);
printf("Sorted array: ");
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
return 0;
}
void quick_sort(int arr[], int low, int high)
{
if (low < high)
{
int p = partition(arr, low, high);
quick_sort(arr, low, p - 1);
quick_sort(arr, p + 1, high);
}
}
int partition(int arr[], int low, int high)
{
int pivot = arr[high];
int i = low - 1;
for (int j = low; j <= high - 1; j++)
{
if (arr[j] < pivot)
{
i++;
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;
}
```
在快速排序中,使用了递归来实现分治思想。首先选择一个基准元素(pivot),然后将数组分成两个子数组,一个子数组中的所有元素都小于基准元素,另一个子数组中的所有元素都大于等于基准元素。然后递归地对这两个子数组进行快速排序。在partition函数中,采用了一次扫描算法,将小于基准元素的元素移到左边,大于基准元素的元素移到右边,最后将基准元素放到中间位置。