交换排序(冒泡排序,优化冒泡排序,快速排序,以及快速排序优化的三种方法详解)

本文介绍了交换排序中的冒泡排序和快速排序,包括它们的基本思想、步骤和时间复杂度。针对冒泡排序,提到了优化方案;而对于快速排序,不仅阐述了其原理,还探讨了最坏情况及其改善措施,如随机化选择主元、三平均分区法,并提出了在特定场景下的改进策略。
摘要由CSDN通过智能技术生成

交换排序:利用交换元素的位置进行排序的方法称为交换排序。常用的交换排序有冒泡排序和快速排序。

 

冒泡排序算法:

基本思想:n个元素,序列进行N-1次循环,依次比较相邻两个元素的大小,如果array[i]>array[i+1],则交换两个元素,反之则不交换。这样每次循环都能比较出数值最大的那个元素。

 

最好最坏情况:

最好情况是正序,时间复杂度是O(N),比较次数为n-1次

最坏情况是逆序,时间复杂度是O(N2),比较次数为n(n-1)/2

步骤:

初始序列:49 38 65 97 76 13 27 49*

  1.       38 49 65 76 13 27 49* 97

  2.       38 49 65 13 27 49* 76 97

  3.       38 49 13 27 49* 65 76 97

  4.       38 13 27 49 49* 65 76 97

  5.       13 27 38 49 49* 65 76 97

  6.       13 27 38 49 49* 65 76 97

  7.       13 27 38 49 49* 65 76 97

  8.       13 27 38 49 49* 65 76 97

根据过程可以看出冒泡排序是一个稳定排序算法。

算法代码:

//冒泡排序(稳定算法)
void MaoPaoSort(int *array,int len)
{
        int i, j;
        int temp;
        for (i = 0; i < len; ++i)
        {
               for (j = 1; j < len - i; j++)
               {
                       if (array[j] <array[j-1])
                       {
                              temp = array[j];
                              array[j] = array[j - 1];
                              array[j - 1] = temp;
                       }
               }
        }
}

可以将冒

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值