请介绍一下快速排序并且用c++给出一段代码。
时间: 2023-03-13 20:14:26 浏览: 87
快速排序是一种排序算法,它是采用分治法的一种改进算法。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。下面是一段C语言编写的快速排序代码:void quick_sort(int s[], int l, int r)
{
if (l < r)
{
int i = l, j = r, x = s[l];
while (i < j)
{
while(i < j && s[j]>= x) // 从右向左找第一个小于x的数
j--;
if(i < j)
s[i++] = s[j];
while(i < j && s[i]< x) // 从左向右找第一个大于等于x的数
i++;
if(i < j)
s[j--] = s[i];
}
s[i] = x;
quick_sort(s, l, i - 1); // 递归调用
quick_sort(s, i + 1, r);
}
}
相关问题
用C++写一段快速排序代码
以下是用C++实现快速排序的代码:
```c++
#include <iostream>
using namespace std;
void quicksort(int arr[], int left, int right) {
int i = left, j = right;
int pivot = arr[(left + right) / 2];
while (i <= j) {
while (arr[i] < pivot)
i++;
while (arr[j] > pivot)
j--;
if (i <= j) {
swap(arr[i], arr[j]);
i++;
j--;
}
}
if (left < j)
quicksort(arr, left, j);
if (i < right)
quicksort(arr, i, right);
}
int main() {
int arr[] = {5, 2, 4, 6, 1, 3};
int n = sizeof(arr) / sizeof(arr[0]);
quicksort(arr, 0, n-1);
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
return 0;
}
```
在上面的代码中,`quicksort()` 函数使用了双指针法来实现快速排序,在每一次循环中,将左指针向右移动直到它指向一个大于等于pivot的元素,然后将右指针向左移动直到它指向一个小于等于pivot的元素,最后交换两个元素的位置。当左指针和右指针相遇时,将待排序数组分成两个部分,递归地对这两个部分进行快速排序,直到整个序列有序。
请帮我用c++写一段快速排序代码
#include <stdio.h>void quick_sort(int arr[], int left, int right)
{
if(left >= right)
return;
int i = left;
int j = right;
int key = arr[left];
while (i < j)
{
while (i < j && arr[j] >= key)
j--;
arr[i] = arr[j];
while (i < j && arr[i] <= key)
i++;
arr[j] = arr[i];
}
arr[i] = key;
quick_sort(arr, left, i-1);
quick_sort(arr, i+1, right);
}int main()
{
int arr[] = {3, 7, 2, 8, 4, 9, 1};
int len = sizeof(arr) / sizeof(arr[0]);
quick_sort(arr, 0, len-1);
for(int i = 0; i < len; i++)
printf("%d ", arr[i]);
printf("\n");
return 0;
}
阅读全文