头歌c语言数据结构快速排序
时间: 2024-06-05 07:05:00 浏览: 168
快速排序是一种常用的排序算法,它是使用分治思想来对数组进行排序。快速排序算法的时间复杂度为 O(nlogn),而且实际应用中也具有良好的性能表现。
具体来说,快速排序算法的实现思路如下:
1. 在待排序数组中选择一个元素作为基准值(一般选择第一个元素或者随机选择)。
2. 将待排序数组中小于等于基准值的元素放在基准值左侧,将大于基准值的元素放在基准值右侧。
3. 对左右两侧的子数组递归进行上述操作,直到子数组长度为 1 或 0。
下面是使用C语言实现快速排序的示例代码:
```
void quick_sort(int arr[], int left, int right) {
if (left >= right) {
return;
}
int i = left, j = right, pivot = arr[left];
while (i < j) {
while (i < j && arr[j] >= pivot) {
j--;
}
arr[i] = arr[j];
while (i < j && arr[i] <= pivot) {
i++;
}
arr[j] = arr[i];
}
arr[i] = pivot;
quick_sort(arr, left, i - 1);
quick_sort(arr, i + 1, right);
}
```
在上述代码中,`arr` 表示待排序数组,`left` 和 `right` 分别表示待排序数组的左右边界。首先判断左右边界是否相等,如果相等则返回。然后选择数组左侧第一个元素作为基准值,使用双指针 `i` 和 `j` 分别指向数组左右两端,从右侧开始向左遍历找到第一个小于基准值的元素,然后将其移动到数组左侧,接着从左侧开始向右遍历找到第一个大于基准值的元素,然后将其移动到数组右侧。重复上述过程直到 `i` 和 `j` 相遇,此时将基准值放到 `i` 的位置,将数组分成了两个部分。最后对左右两个子数组进行递归调用即可。
阅读全文