1.快排
#include<iostream>
#include<vector>
using namespace std;
void print(vector<int> a) {
for (int i = 0; i < a.size(); i++) {
cout << a[i] << " ";
}
cout << endl;
}
int find_base_number(vector<int> &arr, int L, int R) {
int i = L;
int j = R;
int temp = arr[L];//初始化基準數
while (i < j) {
while (i<j && arr[j]>=temp)//從右往左找第一個小於空位的元素
{
j--;
}
arr[i] = arr[j];
while(i<j && arr[i]<=temp)//從左往右找第一個大於空位的元素
{
i++;
}
arr[j] = arr[i];
}
//跳出來時i=j
arr[i] = temp;
return i;
}
void magic_sort(vector<int> &arr, int L, int R) {
if (L >= R) return;
int i = find_base_number(arr,L,R);//找基準數
magic_sort(arr, L, i - 1);
magic_sort(arr, i + 1, R);
}
void main() {
vector<int> arr = { 0,9,1,5,8,3,7,4,6,2 };
print(arr);
int l = 0;
int r = arr.size() - 1;
magic_sort(arr, l, r);
print(arr);
system("pause");
}
2.歸併排序
#include<iostream>
#include<vector>
using namespace std;
void print(vector<int> a) {
for (int i = 0; i < a.size(); i++) {
cout << a[i] << " ";
}
cout << endl;
}
void fun(vector<int> &arr, int L, int R, int mid, vector<int> &temp) {
int i_1 = L;
int j_1 = mid;
int i_2 = mid + 1;
int j_2 = R;
int flag = 0;
while (i_1 <= j_1 &&i_2 <= j_2) {
if (arr[i_1] < arr[i_2]) {
temp[flag++] = arr[i_1++];
}
else {
temp[flag++] = arr[i_2++];
}
}
while (i_1 <= j_1) {
temp[flag++] = arr[i_1++];
}
while (i_2 <= j_2) {
temp[flag++] = arr[i_2++];
}
for (int i = 0; i < flag; i++) {
arr[L + i] = temp[i];
}
}
void magic_sort(vector<int> &arr, int L, int R,vector<int>& temp) {
if (L >= R)return;
int mid = L + (R - L) / 2;
magic_sort(arr, L, mid,temp);
magic_sort(arr, mid + 1, R,temp);
fun(arr, L, R, mid, temp);
}
void main() {
vector<int> arr = { 0,9,1,5,8,3,7,4,6,2 };
print(arr);
int l = 0;
int r = arr.size() - 1;
vector<int> temp(arr.size());
magic_sort(arr, l, r,temp);
print(arr);
system("pause");
}
3.冒泡
#include<iostream>
#include<vector>
using namespace std;
void print(vector<int> a) {
for (int i = 0; i < a.size(); i++) {
cout << a[i] << " ";
}
cout << endl;
}
void main() {
vector<int> arr = { 0,9,1,5,8,3,7,4,6,2 };
print(arr);
for (int i = 0; i < arr.size(); i++) { //表示趟數
for (int j = arr.size() - 1; j > i; j--) {
if (arr[j] < arr[j - 1]) {
swap(arr[j], arr[j - 1]);
}
}
}
print(arr);
system("pause");
}
4.選擇
#include<iostream>
#include<vector>
using namespace std;
void print(vector<int> a) {
for (int i = 0; i < a.size(); i++) {
cout << a[i] << " ";
}
cout << endl;
}
void main() {
vector<int> arr = { 0,9,1,5,8,3,7,4,6,2 };
print(arr);
for (int i = 0; i < arr.size(); i++) { //表示趟數
int temp = i;
for (int j = i + 1; j < arr.size(); j++) {
temp = (arr[temp] < arr[j]) ? temp : j;
}
if (temp != i) {
swap(arr[temp],arr[i]);
}
}
print(arr);
system("pause");
}
5.插入排序
#include<iostream>
#include<vector>
using namespace std;
void print(vector<int> a) {
for (int i = 0; i < a.size(); i++) {
cout << a[i] << " ";
}
cout << endl;
}
void main() {
vector<int> arr = { 0,9,1,5,8,3,7,4,6,2 };
print(arr);
for (int i = 1; i < arr.size(); i++) {
int temp = arr[i];
int j;
for (j = i; j >= 0 && arr[j - 1] > temp; j--) {
arr[j] = arr[j - 1];
}
arr[j] = temp;
}
print(arr);
system("pause");
}