数据结构(交换排序)

来源:互联网 发布:犀牛软件 下载 编辑:程序博客网 时间:2024/06/06 09:10

1、冒泡排序

原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,

这样一趟过去后,最大或最小的数字被交换到了最后一位,

然后再从头开始进行两两比较交换,直到倒数第二位时结束

void BubbleSort(int a[], int n){    for (int i = 1; i < n; i++)    {        bool swaped = false;        for (int j = 0; j < n - i; j++)        {            if (a[j]>a[j + 1])            {                swap(a[j], a[j + 1]);                swaped = true;            }        }        if (!swaped)            break;    }}

算法特点
1 是稳定排序
2 可用于链式存储结构
3 移动记录次数较多,算法平均时间性能比直接插入排序查。当初始记录无序, n较大时,此算法不宜使用。
4 时间复杂度为O(n²)。

2、快速排序

该方法的基本思想是:

1.先从数列中取出一个数作为基准数。

2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。

3.再对左右区间重复第二步,直到各区间只有一个数。

void QuickSort(int a[], int low, int high){    if (low >= high)    {        return;    }    int x = a[low];    int i = low;    int j = high;    while (i < j)    {        while (i < j && a[j] >= x)        {            j--;        }        a[i] = a[j];        while (i < j && a[i] <= x)        {            i++;        }        a[j] = a[i];    }    a[i] = x;    QuickSort(a, low, i - 1);    QuickSort(a, j + 1, high);}

算法特点
1 时间复杂度O(nlogn²);
2 是不稳定的
3 排序过程中需要定位表的下届和上届,所以适用于顺序结构,很难用于链式结构。
4适合初始记录无序,n较大的情况。

原创粉丝点击