本来是大一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]);
}
}