【C语言】排序算法

排序算法:

(1)冒泡排序:像冒泡一样,比较相邻的两个数,比较轮数为n-1次

    int j,tmp;
    for(i = 0;i < N - 1;i++) //比较N-1次
    {
        for(j = N - 1;j > i;j--)
        {
            if(a[j - 1] > a[j])
            {
                tmp = a[j - 1];
                a[j - 1] = a[j];
                a[j] = tmp;
            }
        }
    }

(2)选择排序:从后面的数中寻找最小的一个数进行交换

    //排序
    int j,tmp,k;
    for(i = 0;i < N - 1;i++)
    {
        k = i;
        for(j = i + 1;j < N;j++)
        {
            if(a[k] > a[j])
            {
                k = j;
            }
        }
        if(k != i)
        {
            tmp = a[k];
            a[k] = a[i];
            a[i] = tmp;
        }
    }

(3)插入排序:不断扩充有序列,插入位置由右向左找

    //排序
    int j,tmp;
    for(i = 1;i < N;i++)
    {
        if(a[i - 1] > a[i])
        {
            tmp = a[i];
            for(j = i - 1;j >= 0 && tmp < a[j];j--)
            {
                a[j + 1] = a[j];
            }
            a[j + 1] = tmp;
        }
    }

(4)二分法排序:不断扩充有序列,插入的位置由二分法决定

    //排序
    int j;
    int mid,low = 0,high = 0;
    int tmp = 0;

    for(i = 1;i < N;i++)
    {
        low = 0;
        high = i - 1;//有序数列的上限
        tmp = a[i];//要进行判断/插入的数
        
        while(low <= high)//做上限修正,直至确定插入的位置
        {
            mid = (low + high) / 2;
            if(tmp < a[mid])//判断数 <?>中值
            {
                high = mid - 1;
            }
            else
            {
                low = mid + 1;
            }
        }
        
        for(j = i;j > low;j--)
        {
            a[j] = a[j - 1];
        }
        a[low] = tmp;
      
    }

猜你喜欢

转载自blog.csdn.net/qq_42417182/article/details/87216547