算法动图来自菜鸟教程(侵删)
参考链接:十大经典排序算法
以从小到大为例,从头开始遍历数组,只要遇到前面比后面小的,就交换两者位置,直到末尾,最多循环n-1
次。
#include
using namespace std;
class Solution {
public:
void Bubblesort(int *input, int size) {
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i - 1; j++) {
if (input[j] < input[j + 1]) {
int temp = 0;
temp = input[j];
*(input + j) = input[j + 1];
*(input + j + 1) = temp;
}
}
}
}
void CreateNum(int *nums) {
for (int i = 0; i < 10; i++) {
*(nums + i) = i;
}
}
void PrintNum(int *nums) {
for (int i = 0; i < 10; i++) {
cout << *(nums + i) << " :";
}
cout << endl;
}
};
int main() {
int nums[10];
int *p = nums;
Solution a;
a.CreateNum(p);
a.PrintNum(p);
a.Bubblesort(p, 10);
a.PrintNum(p);
return 0;
}
执行结果
分而治之,将一段数据根据基准数(比它大,比它小于等于)划分为两部分。
对划分后的两个数组递归执行划分。
#include
using namespace std;
class Solution {
public:
int Paritition(int arr[], int left, int right) {
int pivot = arr[left];
while (left < right) {
while (left < right && arr[right] >= pivot) {
right--;
}
arr[left] = arr[right];
while (left < right && arr[left] <= pivot) {
left++;
}
arr[right] = arr[left];
}
arr[left] = pivot;
return left;
}
void QuickSort(int input[], int start, int end) {
if (start < end) {
int pivot = Paritition(input, start, end);
QuickSort(input, start, pivot - 1);
QuickSort(input, pivot + 1, end);
}
}
void CreateNum(int *nums) {
for (int i = 0, j = 10; i < 10; i++, j--) {
*(nums + i) = j;
}
}
void PrintNum(int *nums) {
for (int i = 0; i < 10; i++) {
cout << *(nums + i) << " :";
}
cout << endl;
}
};
int main() {
int nums[10];
int *p = nums;
Solution a;
a.CreateNum(p);
a.PrintNum(p);
a.QuickSort(nums, 0, 9);
a.PrintNum(p);
return 0;
}
运行截图: