可以找一些帖子理解下几类排序算法或者听下陈越姥姥在mooc上的数据结构:http://www.icourse163.org/course/zju-93001
→ 插入排序
从待排序的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;
}
}
→ 希尔排序
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;
}
}
}
}
简单选择排序
从所有记录中选出最小的一个数据元素与第一个位置的记录交换;然后在剩下的记录当中再找最小的与第二个位置的记录交换,循环到只剩下最后一个数据元素为止。
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;
}
}
}