数据结构(交换排序)

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较大的情况。

你可能感兴趣的:(C++)