1. 冒泡排序

核心思想

从后往前每次将相邻元素比较、交换,直到所有元素有序

核心代码

//冒泡排序
void BubbleSort()
{
    int n=10;
    for (int i=0;i<n;i++)
    {
        int flag=0;
        for (int j=n-1;j>i;j--)
        {
            if (a[j]<a[j-1])
            {
                swap(&a[j],&a[j-1]);
                flag=1;
            }
        }
        if (flag==0) return;
    }
}

举例

5 4 7 3 6

第一趟:3 5 4 7 6

第二趟:3 4 5 6 7

排序完成

2.快速排序

核心思想

每次以第一个元素为中枢,两个指针,low指针指向第一个元素,high指针指向最后一个元素。从最后一个元素向前一直遍历,直到比中枢小,将这个元素移到low指针的位子上;然后将low指针向后遍历,直到比中枢大,最后当low>high的时候,low指针的位子就是中枢的最终位置。

核心代码

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

举例

25 84 21 47 15 27 68 35 20

第一趟:20 15 21 25 47 27 68 35 84

第二趟:15 20 21 25 35 27 47 68 84

第三趟:15 20 21 25 27 35 47 68 84

特点

每趟的中枢左边元素都比它小,右边元素都比它大。

3.总结

稳定性

冒泡排序:稳定

快速排序:不稳定

效率

空间复杂度

冒泡排序:O(1)

快速排序:O(logn)

时间复杂度

冒泡排序:O($n^2$)

快速排序:O(logn),最坏情况O($n^2$)

最后修改:2023 年 12 月 26 日
如果觉得我的文章对你有用,请随意赞赏