都知道冒泡排序是最简单的排序,其原理就是相邻的两个数比较,如果前面的数字比后面的数字要大的话,两者就交换位置。
如果我说的不是很明白,那就看一下动态图。
下面是代码:
#include#define N 10 using namespace std; int main() { int i, j, t; int a[N] = {10, 8, 5, 6, 2, 3, 1, 7, 9, 4}; for (i = 0; i < N - 1; i++) { for (j = 0; j < N - 1 - i; j++) { if (a[j] > a[j + 1]) { t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; } } } for (i = 0; i < N; i++) printf("%d ", a[i]); return 0; }
实质上,冒泡排序是先将最大的数字排好。
选择排序选择排序的话,就是往后面找比当前小而且最小的数,如果找到了就交换,看起来就好像是避免了像冒泡排序的挨个交换。
不理解的看一下动图
下面是代码:
#include插入排序#define N 10 using namespace std; int main() { int a[N] = {10, 8, 5, 6, 2, 3, 1, 7, 9, 4}; int i, j, t; for (i = 0; i < N; i++) { int flag = i; for (j = i + 1; j < N; j++) { if (a[flag] > a[j]) { flag = j; } } if (flag != i) { t = a[flag]; a[flag] = a[i]; a[i] = t; } } for (i = 0; i < N; i++) printf("%d ", a[i]); return 0; }
插入排序有点像打扑克一样,就是默认先前抓到手的牌是有序的,如果找到一个数,就往前面插,其他牌往后挪。
原理看一下动图:
下面是代码:
#include#define N 10 using namespace std; int main() { int a[N] = {10, 8, 5, 6, 2, 3, 1, 7, 9, 4}; int i, j, t; //默认i前面的数字已经排好了 for (i = 1; i < N; i++) { int key = a[i]; j = i - 1; while (j >= 0 && key < a[j]) { a[j + 1] = a[j]; j--; } a[j + 1] = key; } for (i = 0; i < N; i++) printf("%d ", a[i]); return 0; }
注明出处,动图来自菜鸟教程,内容为作者原创。



