快速排序c语言
时间: 2023-06-22 16:30:32 浏览: 54
快速排序是一种常用的排序算法,其基本思想是通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,然后分别对这两部分记录继续进行排序,以达到整个序列有序的目的。
下面是快速排序的C语言实现代码:
```c
void quick_sort(int arr[], int left, int right)
{
int i, j, pivot, temp;
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) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
temp = arr[pivot];
arr[pivot] = arr[j];
arr[j] = temp;
quick_sort(arr, left, j - 1);
quick_sort(arr, j + 1, right);
}
}
```
在这个实现中,我们首先将数组分成两部分,左半部分和右半部分。然后我们选择数组的第一个元素作为“枢轴”(pivot),并将其存储在变量pivot中。
接下来,我们使用两个指针i和j来遍历数组。指针i从左边开始向右移动,指针j从右边开始向左移动。如果arr[i]大于pivot,那么我们将i向右移动,直到找到一个小于或等于pivot的元素。同样的,如果arr[j]小于或等于pivot,我们将j向左移动,直到找到一个大于pivot的元素。如果i < j,则交换arr[i]和arr[j]。最后,我们将pivot的值与arr[j]的值交换,并继续递归地对左边的子数组和右边的子数组进行快速排序。
这个实现的时间复杂度为O(NlogN),其中N是数组的大小。