给定数组a[ ]={8,4,3,7,1,5,6,2},使用快速排序算法对其进行排序
时间: 2023-10-10 21:07:35 浏览: 120
最新的.NET面试题及答案
5星 · 资源好评率100%
给定数组a[ ]={8,4,3,7,1,5,6,2},使用快速排序算法对其进行排序。快速排序算法的步骤如下:
1. 选择一个枢轴元素。在这个例子中,我们选择第一个元素8作为枢轴。
2. 设置两个指针i和j,分别指向数组的头和尾。
3. 从尾部开始,找到第一个小于枢轴的元素,并将其与指针i指向的元素交换位置。
4. 从头部开始,找到第一个大于枢轴的元素,并将其与指针j指向的元素交换位置。
5. 重复步骤3和步骤4,直到指针i和指针j相遇。
6. 分别对枢轴左边和右边的子数组递归地进行快速排序。
7. 当子数组的长度为1时,排序完成。
根据上述步骤,我们可以实现以下代码对给定的数组进行快速排序:
#include <iostream>
using namespace std;
void quicksort(int low, int high, int a[]) {
if (low >= high)
return;
int i = low, j = high;
int pivot = a[low];
while (i < j) {
while (a[j] >= pivot && i < j)
j--;
a[i] = a[j];
while (a[i] <= pivot && i < j)
i++;
a[j] = a[i];
}
a[i] = pivot;
quicksort(low, i - 1, a);
quicksort(i + 1, high, a);
}
void print(int a[], int n) {
for (int i = 0; i < n; i++)
cout << a[i] << " ";
}
int main() {
int a[] = {8, 4, 3, 7, 1, 5, 6, 2};
int n = sizeof(a) / sizeof(a);
quicksort(0, n - 1, a);
print(a, n);
return 0;
}
上述代码运行结果为:1 2 3 4 5 6 7 8。
快速排序算法在最好情况下的时间复杂性为O(nlogn),即每次枢轴的选择都能平均地将数组划分成两个大小接近的子数组。在最坏情况下,时间复杂性为O(n^2),即每次枢轴的选择都导致划分出一个长度为0的子数组和一个长度为n-1的子数组。然而,在实践中,快速排序算法具有较好的平均时间复杂性。
阅读全文