这三种排序原理很简单,直接附上代码,具体看注释,以对数组排序为例
#include <iostream>
using namespace std;
void bubblesort(int *a, int n) { //a:数组指针 n:数组大小
for (int i = 1; i < n; i++) { //一共需要进行n-1次扫描
//从第i趟时从a[0]到a[n-i-1]都与它们下一个数比较
for (int j = 0; j < n - i; j++) { //每一趟还未排序的元素个数是n-i+1;需要n-i次比较交换
if (a[j] > a[j + 1]) {//逆序
swap(a[j], a[j + 1]);
}
}
}
}
void selectsort(int *a, int n) {
for (int i = 0; i < n; i++) {//一共进行n趟扫描
int k=i; //记录待排序部分的第一个位置
for (int j = i+1; j < n; j++) { //通过比较后面与第一个的大小,找出最小的元素
if (a[j] < a[k]) {
k = j;
}
}
swap(a[k], a[i]);//把最小的元素放到第一位
}
}
void sertsort(int *a,int n) {
for (int i = 1; i < n; i++) { //a[0]一个元素天然有序,所以待排序部分n-1,故需要n-1次扫描
int j = i, temp = a[i]; //记录待排序部分第一个元素下标和值
while (j>=1 && temp < a[j - 1]) { //从后往前枚举已有序的部分来确定插入位置,只要temp小于前一个元素a[j-1]
a[j] = a[j - 1]; //把a[j-1]往后移一位至a[j]
j--;
}
a[j] = temp; //插入位置为j
}
}
int main() {
int a[] = {1,2,3,4,5,6,7,8,9,0,10,11,13,12};
int n = sizeof(a) / sizeof(int);
//bubblesort(a, n);
selectsort(a, n);
//sertsort(a, n);
for (int i = 0; i < n; i++) {
cout << a[i] << " ";
}
cout << endl;
return 0;
}