1. 选择排序
选择排序的第i次循环中选取对应的第i小的数放在list[i]中。
选择排序是不稳定的,算法复杂度是O(n ^2 )。
循环思想:第i次遍历,是把L[i+1]到L[n]的所有数与L[i]进行比较,并选出其中最小的数放到L[i] 里。
每一轮遍历只能排好一个数。
void
selection_sort(
int
*l,
int
n)
{
int
i, j, tmp, min;
for
(i = 0; i < n-1; i++) {
min = i;
for
(j = i+1; j < n; j++)
if
(l[j] < l[min])
min = j;
tmp = l[min], l[min] = l[i], l[i] = tmp;
}
}
2. 插入排序
把L[i]插入到L[i-1]到L[0]中适当的位置上。
循环中l[i+1] 是 待比较的数;
如: 1, 4, 3, 2;
首先交换把3放到2的位子上; 3的位子还是3;
然后与4比较,4挪到3的位子上;
再把2放到4的位子上。
void
insertion_sort(
int
*l,
int
n)
{
int
i, j, next;
for
(i = 1; i < n; i++) {
next = l[i];
for
(j = i-1; j >= 0 && next < l[j]; j--)
l[j+1] = l[j];
l[j+1] = next;
}
}