排序算法

排序算法

BUBSort 冒泡排序

伪代码

do
- swapped = false
- from i = 1 to 最后一个没有排序过元素的索引 - 1
- if left > right
- - swap (left, right)
- - swapped = true
while swapped

代码实现

void BubSort()
{
    int tem=0;
    bool swapped;
    do
    {
        tem++;
        swapped=false;
        for(int i=1;i<=n-tem;i++)
            if(a[i]>a[i+1]) 
                swap(a[i],a[i+1]),swapped=true;
    }while(swapped);
}

时间复杂度;\(O(n^2)\)

稳定排序。

SELSort 选择排序

伪代码

do(n - 1)times
- 把 第一个没有排序过的元素 设置为 Min
- do 每个没有排序过的元素
- - 如果元素 now < 现在的 Min
- - - 将此元素设置成为新的 Min
- swap (Min, 第一个没有排序过的元素)

代码实现

void SelSort()
{
    for(int i=1;i<n;i++)
    {
        int Min=i;
        for(int j=i+1;j<=n;j++)
            if(a[j]<a[Min])
                Min=j;
        swap(a[Min],a[i]);
    }
    return ;
}

时间复杂度:\(O(n^2)\)

不稳定排序。

INSSort 插入排序

将第一个元素标记为已排序
对于每一个未排序的元素 X
  “提取” 元素 X
  i = 最后排序过元素的索引 到 0 的遍历
    如果当前元素 j > X
      将排序过的元素向右移一格
    跳出循环并在此插入 X

QUISort 快速排序

对于每个(未排序)的部分
将 first 元素设为 pivot
- tem = pivot 索引 + 1
- 从 i = pivot 索引 + 1 到 最右索引 的遍历
- - 如果 a[i] < a[pivot]
- - - 交换 (i, tem); tem ++;
- 交换(pivot, tem - 1)
posted @ 2024-08-07 10:36  RainCQwQ  阅读(34)  评论(0)    收藏  举报