交换类排序(冒泡排序及快速排序)

本文介绍了交换类排序算法的基本思想及其实现方式,包括冒泡排序和快速排序两种具体方法。冒泡排序通过反复比较相邻元素并交换逆序对来完成排序;快速排序则通过选择一个枢轴将数据分为两部分,递归地对这两部分进行排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

交换类排序算法的基本思想是:对带排序记录的关键字两两比较,只要发现两个记录为逆序就进行交换,直到没有逆序为止
一.冒泡排序
冒牌排序也叫相邻比较法,即在扫描带排序记录序列是,顺次比较两个记录的关键字大小,如果逆序就交换记录
动画示意(此处用http://blog.youkuaiyun.com/wall1999/article/details/55192744中的动图)
这里写图片描述

```
//这里是c语言的实现,js也可以用,思想相同,稍微改动即可
void BubbleSort(RecordList L){
    flag=1;
    for(i=0;i<=L.length-1&&flag;i++)//只有flag为1才排序
    {
        flag=0;
        for(j=0;j<L.length-i;j++)//注意此处为length-i,前面排过序的不必在排,去掉他们
        { 
         if(L.r[j].key>l.r[j+1].key)//如果前一个数大于后面的数就交换位置,因此此处是升序排序
           {
            t=L.r[j];
            L.r[j]=L.r[j+1];
            L.r[j+1]=t;
            flag=1;   
           }
        }
     }
 }

```
由上述代码可以看出,如果不需要排序,则flag不会由0改为1,因此外层循环判断不成立,不再排序。
**时间复杂度:最好的情况下已经为正序,那么外层循环只进行1次就结束整个过程,最小时间代价为O(n),但最差情况下,外层循环要进行n-1次,每一次外层循环控制内层循环进行n-1次,所以为O(n^2)**

二.快速排序
数据结构中描述快速排序的基本思想为:从带排序序列中任选一个作为‘枢轴’,小于枢轴的移动在枢轴前,大于的移动到枢轴后,一趟排序后无序序列被分为左右两个子序列,然后分别对分隔所得的子序列递归地进行快速排序,以此类推,直到每个子序列只含有一个记录为止。

  function QKSort(myArr){
            // 如果只有一位,就没有必要比较
            if(myArr.length<=1){
                return myArr;
            }
            // 获取中间值的索引
            var len = Math.floor(myArr.length/2);
            // 截取中间值
            var cur = myArr.splice(len,1)[0];//从中间值的位置删除一项,即把中间值从原数组中提出来,并复制给cur,因为splice会返回一个包含被删除项的数组
            // 小于中间值放这里面
            var left = [];
            // 大于的放着里面
            var right = [];
            for(var i=0;i<myArr.length;i++){
                // 判断是否大于
                if(cur>myArr[i]){
                    left.push(myArr[i]);
                }else{
                    right.push(myArr[i]);
                }
            }

            // 通过递归,上一轮比较好的数组合并,并且再次进行比较。
            return QKSort(left).concat(cur,QKSort(right));


        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值