排序之交换排序(快排和冒泡)

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

题目:
数据结构实验之排序二:交换排序
Time Limit: 1000 ms Memory Limit: 65536 KiB
Submit Statistic Discuss
Problem Description
冒泡排序和快速排序都是基于”交换”进行的排序方法,你的任务是对题目给定的N个(长整型范围内的)整数从小到大排序,输出用冒泡和快排对这N个数排序分别需要进行的数据交换次数。
Input
连续多组输入数据,每组数据第一行给出正整数N(N ≤ 10^5),随后给出N个整数,数字间以空格分隔。
Output
输出数据占一行,代表冒泡排序和快速排序进行排序分别需要的交换次数,数字间以1个空格分隔,行末不得有多余空格。
Sample Input
8
49 38 65 97 76 13 27 49
Sample Output
15 9
Hint
注意:数据相等时不做交换
Source
xam
代码:

#include<stdio.h>
#include<stdlib.h>
int a[100000],b[100000];
int num1,num2;
int kuaisort(int a[],int left,int right)
{
    int x=a[left],i=left,j=right;
    if(i<j)
    {
        while(i<j)
        {
            while(i<j&&a[j]>=x)j--;
            if(a[i]!=a[j])num1++;
            a[i]=a[j];//快排在最后一个肯定i和j指向同一个数,所以要进行判断
            while(i<j&&a[i]<=x)i++;
            if(a[i]!=a[j])num1++;
            a[j]=a[i];
        }
        a[i]=x;
        kuaisort(a,left,i-1);
        kuaisort(a,i+1,right);
    }
    return num1;
}
int  maosort(int a[],int n)
{
    int i,j,t;
    for(i=1; i<=n-1; i++)
    {
        for(j=1; j<=n-i; j++)
        {
            if(a[j+1]<a[j])
            {
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
                num2++;
            }
        }
    }
    return num2;
}
int main()
{
    int n,i;
    while(~scanf("%d",&n))
    {num1=0,num2=0;
        for(i=1; i<=n; i++)
        {
            scanf("%d",&a[i]);
            b[i]=a[i];//此处要注意重置一个数组,因为当快排完成后序列已经是有序的了,对冒泡来说交换次数就只能是0了
        }
        num1=kuaisort(a,1,n);
        num2=maosort(b,n);
        printf("%d %d\n",num2,num1);
    }
    return 0;
}

注意事项:
对于Num 1和num2 没有办法在全局中初始化,但是可以先定义一个全局变量,在主函数中调用快排和冒泡之前就进行初始化

校园网改造实录:手把手教你用华为MA5800 OLT调试全光网(附常用排错命令) 本文详细记录了校园全光网改造中华为MA5800 OLT的部署与调试过程,涵盖设备选型、基础配置、ONU批量部署及高频故障排查。通过实战案例排错命令,帮助网络工程师快速掌握全光网调试技巧,实现低延迟、高稳定的网络性能。 阅读详情

相关推荐

echarts的坐标轴处理算法

参考原文:https://www.cnblogs.com/vicky-li/p/11653415.html。2、可用于双轴的情况,指定splitNumber,保证左右两边的线没有交叉显示的情况。1、设置echarts显示的最大最小值,让数据显示比较有起伏。处理echarts的一些问题。

HYeeee的博客 780

排序系列--冒泡排序快排

冒泡排序快排

m0_52347974的博客 1003

ROS与Qt5人机交互界面开发:添加rviz显示界面

最后,点击"完成"以创建新的Qt5应用程序项目。通过结合ROSQt5,您可以创建强大的人机交互界面,以实现丰富的机器人控制数据可视化。在本教程中,我们将在主窗口中创建一个简单的按钮,用于启动rviz显示界面。在Qt Creator的槽函数编辑器中,为按钮添加一个槽函数,该函数将在单击按钮时调用。在上面的代码中,我们使用QProcess类启动了一个新的进程,并执行"rviz"命令来启动rviz显示界面。当您单击Qt5应用程序中的按钮时,将会启动一个新的rviz窗口,显示机器人数据的可视化界面。

CodeJolt的博客 2039

排序算法中——冒泡排序快速排序

上篇介绍了排序算法中的插入,选择,希尔排序,本篇讲主要讲解冒泡排序快速排序

2303_81060385的博客 5880

冒泡排序快速排序的区别

冒泡排序:是从最底层元素开始比较,(与其上的元素比较)小于就往上再比,大于就交换,再用较小的往上比较,直到最高层, 第一次把最小的放到最上层,第二次把第二小的放到第二层,以次类推; 冒泡排序的原理:重复的遍历要排序的数组,每次遍历过程中从头至尾比较两个相邻的元素,若顺序错误则交换两个元素。 快速排序:是先找到一个轴值,比较时把所有比轴值小的放到轴值的左边, 比轴值大的放到右边,再在两边各自选取轴值再按前面排序,直到完成. 冒泡排序的基本思想:每次比较两个相邻的元素,如果它们的顺序错误就把他们交换过来

强化学习曾小健 3819

冒泡排序与快速排序

两种交换排序算法一、冒泡排序1. 代码展示2. 代码优化3. 时空分析二、快速排序1. 代码展示2. 代码优化3.时空分析   交换排序的基本思想是:两两比较待排序记录的关键字,一旦发现两个记录不满足次序要求时,则进行交换,直到整个序列满足要求位置。在这里首先介绍基于简单交换思想实现的排序——冒泡排序,然后再此基础上进行改进的排序方法——快速排序。 一、冒泡排序   冒泡排序(Bubble Sort) 一种最简单的交换排序方法,他通过比较两两比较相邻记录的关键字,如果发生逆序,则进行交换,从而使关键字小的记

weixin_53361650的博客 2188

简述冒泡排序与快速排序

简述冒泡排序与快速排序

一恍过去 2万+

交换排序——冒泡排序快排

选择最左边的值做Keyi,左边找比a[Keyi]大的值,右边找比a[Keyi]小的值,然后后交换a[left]a[right]的位置。当cur找到一个比a[key]小的数就停下来,prev就向前挪动一个位置,并交换a[pre]a[cur]的位置。冒泡排序的思想很简单:访问一组序列,每次访问的时候下一个数相比较,把较大或者较小的数值向后挪,每一次遍历就将最大或者最小的数值挪到序列的尾部。最坏的情况是O(N^2),这个时候每次排完序之后Keyi的位置都在最大或者最小的位置(也就是有序的情况)。

qq_45576085的博客 175

冒泡排序快排交换次数

数据结构实验之排序二:交换排序 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 冒泡排序快速排序都是基于"交换"进行的排序方法,你的任务是对题目给定的N个(长整型范围内的)整数从小到大排序,输出用冒泡快排对这N个数排序分别需要进行的数据交换次数。 Inpu

makelucky的博客 2963

交换排序冒泡快排

交换排序:基本思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。冒泡排序:基本思想:通过相邻数字两两交换来找出最大(最小)的数字放到合适的位置上。快速排序的单趟排序是以一个数作为基准值,实现将数组中比基准数小的数放在基准值的左侧,比基准值大的数放在基准值的右侧。

Liufan____的博客 289

Java排序算法 - 交换算法之 冒泡快排

一、交换排序简介 交换排序包含冒泡排序快速排序冒泡排序是一种非常简单的稳定的排序算法,快速排序是一种较为复杂是一种非稳定的排序算法。 冒泡排序的核心思想是,遍历数组,重复扫描待排序序列,并比较每一对相邻的元素,当该对元素顺序不正确时进行交换。一直重复这个过程,直到没有任何两个相邻元素可以交换,就表明完成了排序。快速排序是对冒泡排序的优化,核心思想是分而治之,利用一个中枢值,把比中枢值大的数字排在右边,比中枢值小的数字排在左边,这样就完成一趟快排,然后将中枢值左边右边的数分别再重复以上过程,直到每趟快排

rongwei496的博客 381

排序算法之交换排序冒泡快排

交换排序的基本思想:两两比较待排序记录的关键字,发现两个记录的次序相反时,进行交换,直到没有反序的记录为止。本篇介绍两种交换排序----冒泡排序快速排序冒泡排序是一种经典的交换排序算法,基本思想是:通过无序区中相邻记录的关键字间的比较位置的交换,使关键字最小的记录像气泡一样逐渐向上漂至水面。整个算法是从最下面的记录开始,对每两个相邻的关键字进行比较,把关键字较小的记录放到关键字较大的记录的

xu_kelly的专栏 673

交换排序冒泡快排

//填坑分治的思想,基准值比较,比基准值大的放在它的右边,比基准值小的放在它的左边 void quickSort(int array[], int low, int high) { if (low >= high)//递归的终止条件 { return; } int i = low; int j = high; key = array[i]; while (i < j) { while (i &l.

gbbfum的博客 107

快排冒泡 ——数据结构实验之排序二:交换排序

数据结构实验之排序二:交换排序 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Description 冒泡排序快速排序都是基于"交换"进行的排序方法,你的任务是对题目给定的N个(长整型范围内的)整数从小到大排序,输出用冒泡快排对这N个数排序分别需要进行的数据交换次数。 Inpu...

RuMR的博客 225

B - 数据结构实验之排序二:交换排序冒泡快排

Description 冒泡排序快速排序都是基于"交换"进行的排序方法,你的任务是对题目给定的N个(长整型范围内的)整数从小到大排序,输出用冒泡快排对这N个数排序分别需要进行的数据交换次数。 Input 连续多组输入数据,每组数据第一行给出正整数N(N ≤ 10^5),随后给出N个整数,数字间以空格分隔。 Output 输出数据占一行,代表冒泡排序快速排序进行排序分别需要的交换次数,数字间以1个空格分隔,行末不得有多余空格。 Sample Input 8 49 38 65 97 76 13 27 49

baiqiaoxiang的博客 194

交换排序冒泡排序(优化)快排

冒泡排序交换排序:两两交换,每趟交换完成后都会有一个最大的被冒到后面代码//两两交换,每趟交换之后都会冒出一个最大的放在后面, void maopao(int a[],int n){ for (int i = 0; i<n;i++) { for (int j = 0; j<n-i-1; j++) { if (a[j]>a[j+1]) {

li15809284891的专栏 890

DS八大排序冒泡排序快速排序

你真的学会快排了吗?一文带你逐层刨析~!

cp 1044

数据结构实验之排序二:交换排序

数据结构实验之排序二:交换排序 Description 冒泡排序快速排序都是基于"交换"进行的排序方法,你的任务是对题目给定的N个(长整型范围内的)整数从小到大排序,输出用冒泡快排对这N个数排序分别需要进行的数据交换次数。 Input 连续多组输入数据,每组数据第一行给出正整数N(N ≤ 10^5),随后给出N个整数,数字间以空格分隔。 Output 输出数据占一行,代表冒泡排序快速排序进行排序分别需要的交换次数,数字间以1个空格分隔,行末不得有多余空格。 Sample Input 8 49 38 6

qq_45885219的博客 360

交换排序算法【冒泡排序,快速排序】C代码

【代码】交换排序算法【冒泡排序,快速排序】C代码。

大力奇迹的博客 268

【数据结构--排序】(冒泡、选择、插入、希尔、快排、归并、堆排序

冒泡、选择、插入、希尔、快排、归并、堆排序讲解

2401_87046050的博客 915

6.3排序——冒泡排序+快速排序

(1)整体综合性能使用场景都较优(这也是为什么这个排序敢叫快速排序)(2)时间复杂度:o(N·logN)(3)空间复杂度:o(logN)(4)稳定性:不稳定。

E_han的博客 1165

排序算法思想及实现(选择、冒泡、插入、归并、快排

排序算法总结:https://www.cnblogs.com/guoyaohua/p/8600214.html 目录 冒泡排序 选择排序 插入排序 归并排序 快排 冒泡排序 比较相邻元素,大的向后(与小的交换位置);每次都是从头开始依次比较找到最大的元素 每找到依次最大的元素,就确定了数组右边的一个元素 右边元素有序,且为全局最大的;(在无序中前后交换移动) //冒...

liuzewei2015的博客 306
上一篇: 排序之一趟快排
下一篇: 排序之选课名单(利用桶排,链表)
小自洽
博客等级 码龄9年 47粉丝 265原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值