排序的几个基本算法
1、顺序排序:数组内部做排序
第一个和第二个做比对,第一个和第三个多比对,第一个和第四个做比对,以此类推。
//顺序排序 void sort_xunxu(int * a,int n) {// a 数组地址,n: 数组的长度 int i, j; int tmp = NULL; for (i = 0; i < n - 1; i++) { for (j = i + 1; j < n;j++) {// 升序 if (a[i]>a[j]) { tmp = a[i]; a[i] = a[j]; a[j] = tmp; } } } }
2、冒泡排序
顾名思义,就和冒泡泡一样,两个两个对比,谁比较大谁上去。
第一个和第二个比较,第二个和第三个比较,以此类推。
// 冒泡排序 void sort_maopao(int *a,int n) { int i = 0, j = 0; int tmp = 0; for (i = 0; i < n - 1;i++) { for (j = 0; j < n - 1 - i;j++) { // 升序 // 两两对比 if (a[j]>a[j+1]) { tmp = a[j]; a[j] = a[j + 1]; a[j + 1] = tmp; } } } }
3、选择排序
就是记录最大值(或者最小值),互换位置。
// 选择排序 void sort_xuanze(int *a,int n) { int i, j; int min; int tmp; for (i = 0; i < n - 1;i++) { // 选择最小值 min = i; for (j = i + 1; j < n;j++) { // 判定谁打,选择小的位置 if ( a[min]>a[j]) {// 选择最小值的位置 min = j; } // 当最小值的位置如果不是自己的话,就换 if (min != i) { tmp = a[min]; a[min] = a[i]; a[i] = tmp; } } } }