C++ 三種簡單排序 冒泡 選擇 插入
阿新 • • 發佈:2020-12-31
本來是大一C語言基礎,就在這裡記錄一下,就當存個板子
簡單插入排序
插排是最簡單一種排序方法,也是複雜度較高的一種
void Sort::insert_sort(int *num) {
for (int i = 0; i < 13; i++) {
for (int j = 0; j < i; j++) {
if (num[i] > num[j]) {
int temp = num[i];
//向後移
for (int k = i - 1; k >= j; k--) {
num[k + 1] = num[k];
}
num[j] = temp;
}
}
}
}
冒泡(帶flag)
插入排序的複雜度高,但是是一種穩定的排序方法
#include "iostream"
void bubble(int a[]) {
int i, j, flag, temp;
flag = 1;
for (i = 0; i < 10; i++) {
flag = 0;
for (j = 9; j > i; j--) {
if (a[j] > a[j - 1]) {
flag = 1;
temp = a[j];
a[j] = a[j - 1];
a[j - 1] = temp;
//swap(a[j], a[j - 1]);
}
if (flag == 0 )
return;
}
}
}
int main() {
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
bubble(a);
for(int i=0;i<10;i++)
std::cout<<a[i]<<" "<<std::flush;
}
輸出結果:
簡單氣泡排序
冒泡也是一種穩定的演算法,但是複雜度也挺高的
void Sort::bubble(int *num) {
//從前向後冒泡
/*for (int i = 7; i >= 0; i--) {
for (int j = 0; j < i; j++) {
if (num[i] > num[j]) {
swap(num[i], num[j]);
}
}
}*/
//從後向前冒泡
for (int i = 0; i < 13; i++) {
for (int j = 12; j > i; j--) {
if (num[i] > num[j]) {
swap(num[i], num[j]);
}
}
}
}
選擇排序
選擇排序相對於簡單插入排序,複雜度降低
但同時是一個不穩定的排序方法
void Sort::choose(int *num) {
int i;
int j;
/*for (i = 0; i < 13; i++) {
int max_index = i;
for (j = i; j < 13; j++) {
if (num[j] > num[max_index]) max_index = j;
}
swap(num[i], num[max_index]);
}*/
for (i = 12; i >= 0; i--) {
int max_index = i;
for (j = 0; j < i; j++) {
if (num[j] < num[max_index]) max_index = j;
}
swap(num[i], num[max_index]);
}
}