#include <iostream>
using namespace std;
class Sort {
public:
// 交换
void swap(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
// 插入排序
void insertSort(int arr[], int n) {
for (int i = 1; i < n; i++) {
int j = i;
int temp = arr[i + 1];
//前面已经有序,把新值往前插(找位置)
while (j >= 0 && temp < arr[j]) {
arr[j + 1] = arr[j];
j--;
}
//找到位置,插入
arr[j + 1] = temp;
}
}
//希尔排序(插入排序plus)
void shellSort(int arr[], int n) {
int div = n;
while (div > 1) {
div /= 2;
for (int i = 0; i < n - div; i++) {
int j = i;
int temp = arr[j + div];
while (j >= 0 && temp < arr[j]) {
arr[j + div] = arr[j];
j -= div;
}
arr[j + div] = temp;
}
}
}
// 冒泡排序
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
swap(arr[j], arr[j + 1]);
}
}
}
}
//快速排序
void quickSort(int arr[], int n, int left, int right) {
//递归出口
if (left >= right) {
return;
}
int begin = left;
int end = right;
int key = left;
while (left < right) {
//从右往左找比key小的
while (left < right && arr[right] >= arr[key]) {
right--;
}
//从左往右找比key大的
while (left < right && arr[left] <= arr[key]) {
left++;
}
//找到了 交换
swap(arr[left], arr[right]);
}
//重新设置key值
swap(arr[key], arr[left]);
key = right;
//划分区间
quickSort(arr, n, begin, key);
quickSort(arr, n, key + 1, end);
}
};
基础排序算法
最新推荐文章于 2024-09-25 10:36:42 发布