由冒泡、插入、选择排序法到选择问题:N个数确定第k个最大者

本文介绍了冒泡排序、插入排序和选择排序三种方法,对比了它们的原理和效率。对于选择问题,提出了通过预处理前k个数并逐个与后续元素比较来确定第k个最大者的高效解决方案。
摘要由CSDN通过智能技术生成

三种排序法

冒泡排序法: 从序列头部开始遍历,两两比较,如果前者比后者大,则交换位置,直到最后将最大的数(本次排序最大的数)交换到无序序列的尾部,从而成为有序序列的一部分。需要进行n-1轮排序,n*(n-1)/2次比较,时间复杂度O(n^2)。

插入排序法: 从数组的第二个元素,向前开始比较。比第一个元素小,则交换位置。如果第二个元素比较完毕,那就第三个,第四个… 以此类推比较到最后一个元素时,完成排序。由n-1次排序过程组成,每一次排序保证从第一个位置到当前位置的元素为已排序状态。
相较与冒泡排序,插入排序是当前元素和已排序的数组比较,冒泡是“当前”元素在未排序的数组中比较。

选择排序法: 先保存第一个元素的下标,然后后面所有的数依次与第一个元素相比,如果遇到更小的,则记录更小的那个数的下标,然后后面所有的数都依次与那个更小的数比较,直到最后将最小的数的下标找出来,然后再将这个数放到最左边,即与下标为 0 的数互换。如果最小的数的下标就是 0 那么就不用互换。
冒泡排序只要遇到前面比后面大的就互换,而选择排序是比较一轮才互换一次,而且如果本轮中最小的就是最左边那个数则不用互换。所以从这个角度看,选择排序比冒泡排序的效率要高。而且通过上面对选择排序的分析发现,从逻辑上讲,与冒泡排序相比,选择排序更符合人的思维。

#include<iostream>
using namespace std;

void bubbleSort(float* pData, int length)
{
   
    float temp;
    for (int i=0;i<(length-1);++i) //n-1轮排序
    {
   
        for (int j=0;j<(length-i-1);++j)
        {
   
            if(pData[j]<pData[j+1])
            {
   
                temp = pData[j];
                pData[j] = pData[j+1];
                pData[j+1] = temp;
            }
        }
    }
}

void insertSort(float* pData, int length)
{
   
    float temp;
    for (int i
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值