主要记录了常见的七种排序算法
- 外排序:需要在内外存之间多次交换数据才能进行
- 内排序:
- 插入类排序
- 直接插入排序
- 希尔排序
- 选择类排序
- 简单选择排序
- 堆排序
- 交换类排序
- 冒泡排序
- 快速排序
- 归并类排序
- 归并排序
- 插入类排序
1.冒泡排序
相邻数据比较若逆序则交换,经过n-1趟比较交换后,逐渐将小数据冒到数组的前部,大的数据则陈到数组的后部。
void sort_maopao(int a[],int len) { int temp; for (int i = 0;i < len -1;i++) { for (int j = 0;j < len - 1 - i;j++) { if (a[j] > a[j + 1]) { temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } //swap(a[j],a[j+1]); } } }
2.插入排序
从待排序的n个记录中的第二个记录开始,依次与前面的记录比较并寻找插入的位置,每次外循环结束后,将当前的数插入到合适的位置。
void sort_insert(int a[], int len) { int i,j,temp; for (i = 1;i < len;i++) { temp = a[i]; for (j = i - 1;j >= 0;j--) { if (a[j] > temp) { a[j + 1] = a[j]; } else break; } a[j + 1] = temp; } }
3.希尔排序
Shell 排序又称缩小增量排序, 是对直接插入排序的改进,效率提高。对相邻指定距离(称为增量)的元素进行比较,并不断把增量缩小至1,完成排序。
void sort_insert(int a[], int len) { int i,j,gap; int temp; for (gap = len / 2; gap > 0; gap /= 2) { //从数组第gap个元素开始 for (i = gap; i < len; i++) { //每个元素与自己组内的数据进行直接插入排序 if (a[i] < a[i - gap]){ temp = a[i]; j = i - gap; while (j >= 0 && a[j] > temp) { a[j + gap] = a[j]; j -= gap; } a[j + gap] = temp; } } } }
4.简单选择排序
从所有记录中选出最小的一个数据元素与第一个位置的记录交换;然后在剩下的记录当中再找最小的与第二个位置的记录交换,循环到只剩下最后一个数据元素为止。
void sort_insert(int a[], int len) { int i, j, k; int min,temp; for (i = 0;i < len-1;i++) { min = i; for (j = i + 1;j < len;j++) { if (a[j] < a[min]) { min = j; } } if (min != i) { temp = a[i]; a[i] = a[min]; a[min] = temp; } } }
5.快速排序
http://blog.csdn.net/m0_37345402/article/details/76019248
6.堆排序
7.归并排序