排序之交换排序

冒泡排序

void BubbleSort(int arr[],int n)
{
    for(int i=0;i<n-1;i++)
    {
        for(int j=0;j<n-1-i;j++)//每经过一次排序,最大的数就已经确定,因此需要排序的个数就要减少
        {
            if(arr[j]>arr[j+1])
            {
                swap(arr[j],arr[j+1]);
            }
        }
    }
}
总结
  • 时间复杂度仍为n^2

快速排序

void QuickSort(int arr[],int low,int high)
{
    if(low<high)
    {
        int pk=Partition(arr,low,high);//快速排序实际上是找到一个元素将他作为中间元素进行排序,
        //在他左边的一定比他小,而在他右边的一定比他大,因此需要递归继续修改其左右两边的值
        QuickSort(arr,low,pk-1);
        QuickSort(arr,pk+1,high);
    }
}
void Partiton(int arr[],int low,int high)
{
    int pk=arr[low];//pk为哨兵位,用来记录选定的数据
    while(low<high)//一般终止时low==high
    {
        while(low<high&&arr[high]>=pk)//在达到终止条件前,移动了high或者low后,就不用再进入循环了,因此在这也要判断
            high--;
        arr[low]=arr[high];//如果原本在high处的数小于哨兵位,就要将其值赋给low,因为哨兵位的值空出来了,
        //因此在赋值时不用担心将前面的值覆盖了
        while(low<high&&arr[low]<pk)
            low++;
        arr[high]=arr[low];
    }
    arr[low]=pk;//终止时low==high,再将哨兵位pk的值付给他
    return low;
}
总结
  • 如果pk中的数是比较居中的数,则效率较高,如果是最小的数或最大的数,则会退化为冒泡排序
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值