本文详细介绍了快速排序的算法思想、代码实现和算法效率分析,还包括示例和可视化动图,易理解!
Let’s go!🏃♂️
数据结构-排序(五)快速排序
1、算法思想
2、代码实现
#include <iostream>
#include <string>
using namespace std;
/**
* 用第一个元素将待排序序列划分成左右两个部分
* @param arr
* @param low
* @param high
* @return
*/
int Partition(int arr[], int low, int high) {
int pivot = arr[low]; //第一个元素作为枢纽
while (low < high) {
while (low < high && arr[high] >= pivot) //比枢轴小的元素移动到左端
--high;
arr[low] = arr[high];
while (low < high && arr[low] <= pivot) //比枢轴大的元素移动到右端
++low;
arr[high] = arr[low];
}
arr[high] = pivot; //枢轴元素存放到最终位置
return low;
}
/**
* 快速排序
* @param arr
* @param low
* @param high
*/
void QuickSort(int arr[], int low, int high) {
if (low < high) {
int pivotPos = Partition(arr, low, high);
QuickSort1(arr, low, pivotPos - 1); //划分左子表
QuickSort1(arr, pivotPos + 1, high); //划分右子表
}
}
/**
* 输出数组
* @param arr
* @param n
*/
void PrintArray(int arr[], int n) {
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
printf("\n");
}
int main() {
int arr[] = {12, 28, 20, 50, 48, 1, 5, 28};
int n = sizeof(arr) / sizeof(arr[0]);
cout << "输出arr初始数组" << endl;
PrintArray(arr, n);
cout << "arr快速排序" << endl;
QuickSort(arr, 0, n - 1);
cout << "输出arr排序后数组" << endl;
PrintArray(arr, n);
return 0;
}