排序1——冒泡,选择排序

所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。在各个领域中考虑到数据的各种限制和规范,要得到一个符合实际的优秀算法,得经过大量的推理和分析。
本文主要来讲几种排序方法

冒泡排序:

void bouble_sort(int *a, int len)
{
    int i,j;
    for(i = 0; i < len - 1; i++)
    {
        for(j = 0; j < len - 1 - i; j++)
        {
            if(a[j] > a[j + 1])
                swap(a, j, j + 1);
        }
    }
}

冒泡排序是重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
引申——鸡尾酒排序:

void cho_sort(int *a, int len)
{
    int i;
    int left = 0;
    int right = len - 1;

    while(left < right)
    {
        for(i = left; i < right; i++)
        {
            if(a[i] > a[i + 1])
            {
                swap(a, i, i + 1);
            }
        }
        right--;

        for(i = right; i > left; i--)
        {
            if(a[i] < a[i - 1])
            {
                swap(a, i, i - 1);
            }
        }
        left++;
    }
}

鸡尾酒排序也就是定向冒泡排序, 鸡尾酒搅拌排序, 搅拌排序 (也可以视作选择排序的一种变形), 涟漪排序, 来回排序 or 快乐小时排序, 是冒泡排序的一种变形。此演算法与冒泡排序的不同处在于排序时是以双向在序列中进行排序。
选择排序:

void select(int *a, int len)
{
    int i,j;
    int min;

    for(i = 0; i < len - 1; i++)
    {
        min = i;
        for(j = i + 1; j < len; j++)
        {
            if(a[min] > a[j])
            {
                min = j;
            }
        }

        if(min != i)
        {
            swap(a, i, min);
        }
    }
}

选择排序是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

发布了53 篇原创文章 · 获赞 11 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章