csp备考记录--关于排序(稳定排序之一冒泡排序)

稳定排序个人浅见(stable sort)

稳定两个字说的就是排序过程中和排序结果里数值相等的数据的先序关系没有发生变化。
如:

排序前9636*
排序结果366*9

(排序后原先在后边的6依然在后边,这就是稳定的。)

冒泡排序(buble sort)

1、具体内容

1.1冒泡排序原理:

1、对于有n个数的待排序序列,共需进行n-1趟排序,;2、每次排序,都将第k大的数交换至n+1-k位上(即每次只选出未排序中的最大的一个放到该组最后边);3、重复,直至未排序组只剩一个。

1.2分析

时间复杂度:
最好情况:待排序序列已经是升序的了,比较次数n-1,移动次数0。O(n)
最坏情况:待排序序列是逆序的,比较次数n*(n-1)/2,移动次数3n*(n-1)/2。O(n^2)
每次比较的个数较上一次减一,因为上一组最大的那个已经选出来放在最后边了,排好序了。故是一个以n为首相,-1为公差的等差数列。由于是采用一个临时变量实现数值交换的,故每次交换有3次操作,于是移动次数为比较次数乘3.
空间复杂度:
不需要额外辅助存储空间。

2、实现代码

#include <stdio.h>
#define ARR_LEN 255 /*数组容量*/
#define elemType int /*数据类型*/
/* elemType arr[]: 排序目标数组; int len: 元素个数 */
void bubbleSort (elemType arr[], int len)
{
    elemType temp;
    int i, j;
    for (i=0; i<len-1; i++) /* 外循环为总排序趟数*/
    {
        for (j=0; j<len-1-i; j++)/* 内循环为每趟比较的次数,*/ 
  { 
            if (arr[j] > arr[j+1])/* 相邻元素比较,若逆序则交换(升序为左大于右,降序反之) */ 
   { 
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}
int main (void) {
    elemType arr[ARR_LEN] = {6,5,-99,-7,4,100,-6,8,10,4};//待排序序列 
    int len = 10;//排序长度 
    int i;
    bubbleSort (arr, len);
    for (i=0; i<len; i++)
        printf ("%d\t", arr[i]);
    printf("\n");
    return 0;
}

相关链接

https://baike.baidu.com/item/冒泡排序/4602306?fr=aladdin

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值