#include<iostream>
#include<vector>
using namespace std;
// 1. quickSort(arr, 0, n-1); 注意函数调用是左闭右闭区间,所以递归调用的两次也是左闭右闭
void quickSort(std::vector<int>& arr, int low, int high) {
if (low < high) {
int pivot = arr[high]; //1. 取最后一个数
int i = low -1;
// 2. 注意这里不是<=,因为最后一个数用来做基准了,如果有等于,则就是最后一个数和自己比了
for (int j = low; j < high; j++) {
if (arr[j] < pivot) {
i++;
std::swap(arr[i],arr[j]);
}
} // 3. 如果是第一轮,i=-1,for循环后i就表示小于pivot的个数,即左边的个数
std::swap(arr[i+1], arr[high]);
int pi = i + 1; //4. 基准值的idx
quickSort(arr, low, pi - 1); //左闭右闭
quickSort(arr, pi+1, high); //左闭右闭
}
}
void bubbleSort(std::vector<int>& arr) {
int n = arr.size();
for (int i = 0; i < n - 1; i++) { // 1. 注意是i < n-1,比较了n-1次
bool swaped = false;
for (int j = 0; j < n - 1 - i; j++) { //2. n-1再减i是因为数组的最后i个数已经排好序了,最大的数已经到最后面了
if (arr[j + 1] < arr[j]) {
swap(arr[j], arr[j+1]);
swaped = true; // 3. 如果没有发生交换,说明已经排好序了
}
}
if (!swaped) {
return;
}
}
}
int main() {
std::vector<int> arr = {1,10, 7, 8, 9, 0, 5};
int n = arr.size();
// quickSort(arr, 0, n-1);
bubbleSort(arr);
std::cout << "Sorted array: \n";
for (auto n : arr) {
cout << n << endl;
}
// printArray(arr);
return 0;
}
leetcode-快速排序法和冒泡排序法
最新推荐文章于 2024-07-09 23:43:07 发布