现在的位置: 首页 > 综合 > 正文

C排序

2017年12月20日 ⁄ 综合 ⁄ 共 621字 ⁄ 字号 评论关闭

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;
    }
}

抱歉!评论已关闭.