首页 > 其他分享 >快速排序相关

快速排序相关

时间:2023-10-15 21:37:05浏览次数:20  
标签:tmp cnt int while cnt2 相关 排序 快速

对八个元素的序列进行快速排序,在最好的情况下,元素间的比较次数为13

#include<stdio.h>
#define M 8
int cnt=0;
int quickp(int a[],int l,int r) {
    int i=l,j=r,k;
    int tmp=a[l],cnt2=0;
    while(i!=j) {//左右未遍历完成
        while(j>i && a[j]>tmp) {
            j--;
            cnt++;
            cnt2++;
        }
        a[i]=a[j];//a[j]:从右边数比基准小的——基准变为比基准小的数
        while(i<j && a[i]<tmp) {
            i++;
            cnt++;
            cnt2++;
        }
        a[j]=a[i];//a[i]:从左边数比基准大的——比基准小的数变成比基准大的数
    }
    printf("l=%d,i=%d,r=%d,cnt=%d,cnt2=%d\n",l,i,r,cnt,cnt2);
    a[i]=tmp;//找到基准的最后位置,赋值
    for(k=0;k<M;k++) printf("%d ",a[k]);printf("\n");
    return i;//返回基准的最后位置
}
void qp(int a[],int l,int r) {
    if(l<r) {
        int i=quickp(a,l,r);
        printf("%d %d / %d %d\n",l,i-1,i+1,r);
        qp(a,l,i-1);
        qp(a,i+1,r);
    }
}
int main() {
    int a[M],i,j,k;
    for(i=0;i<M;i++) scanf("%d",&a[i]);
    qp(a,0,M-1);
    for(i=0;i<M;i++) printf("%d ",a[i]);
    printf("\n%d",cnt);
    return 0;
}
View Code

 

标签:tmp,cnt,int,while,cnt2,相关,排序,快速
From: https://www.cnblogs.com/zxqxwnngztxx/p/17766215.html

相关文章

  • BASE64编码的相关学习
    网上查找资料学习BASE64编码相关内容,回答:什么是BASE64编码,解决什么问题?使用资源中提供的工具对自己的学号和姓名进行BASE64编码和解码BASE64编码是一种将二进制数据转换为可打印字符的编码方式,解决文本协议中不能直接传输二进制数据的问题。......
  • 排序算法
    排序算法1、冒泡排序​ 冒泡排序是一种非常直接,但是性能比较低的排序方法,其时间复杂度为$\mathcal{O}{n^2}$,它通过两两比较数组中的元素,若第一个元素大于第二个元素,则将两个元素交换位置,逐步将元素中的最大值归位。其排序过程如下图所示:C++代码如下:template<typenameT>void......
  • cpu亲和性相关函数和宏 基础讲解[cpu_set_t]
    cpu亲和性相关函数和宏讲解:写在前面:我在查找关于linuxcpu宏函数没看到有对宏函数基础的、详细的讲解,笔者便通过官方文档入手,对次进行的翻译和理解希望能帮到对这方面宏有疑惑的读者explain:/elem/表示为elem变量,这样子便于区分P.S:#include<sched.h>动态范围cpu设置......
  • C语言快速排序详解
    【1】快速排序核心思想核心思想是分而治之,每一轮排序都会选出一个基准,一轮排序完成后,所有比基准小的数一定在左边,比基准大的数一定在右边,在分别通过同样的方法对左右两边的数组进行排序,不断划分,最后完成整个数组的排序。它的效率相比冒泡排序的双重for循环有所提升。时间复杂......
  • sort是不稳定排序
    一道题调了一周,今天终于调过了……题目不算很难写,就是poj1007的DNAsorting,字符串求逆序数然后升序排序。之前交的代码是这样的:#include<iostream>#include<algorithm>usingnamespacestd;typedefstructnode{charstr[55];intnum;}Node;boolcmp(Nodea......
  • UML相关知识复习
    1、耦合标记耦合--->参数传递;访问另一个模块的内部数据-->内部耦合;模块之间关联程度最高的是内部耦合;2、内聚内聚程度由高到低:功能聚合-->顺序聚合-->瞬时聚合-->逻辑聚合;3、数据流图(DFD)数据流图包括:外部实体、数据流、加工、数据存储;4、设计模式的根本目的复习相似问题......
  • 一.排序算法---并归排序
    一.并归排序(自定义实现)merge函数:这个函数用于将两个已排序的子数组合并为一个更大的已排序数组。它包括创建临时数组L和R来存储左半部分和右半部分的元素,然后比较这些元素并将它们按升序合并到原始数组arr中。mergeSort函数:这个函数是归并排序的主要函数。它采用递......
  • r - How do I order by row.names in dataframe R语言 排序
     new_df<-df[order(row.names(df)),]REF:https://stackoverflow.com/questions/20295787/how-can-i-use-the-row-names-attribute-to-order-the-rows-of-my-dataframe-in-rhttps://stackoverflow.com/questions/25194196/how-do-i-order-by-row-names-in-dataframe......
  • Javascript、axios、vue基础命令快速学习
    1.js:JavaScript基础学习JavaScript基础学习简单案例1.点击img1,则展示img1图片默认,点击img2则展示img2图片2.输入框鼠标聚焦onfocus后,显示小写toLowerCase(),失去焦点onblur后显示大写toUpperCase()3.点击全选按钮,所有复选框为被选中状态,点击反选则取消勾选状态JavaScrip......
  • 轻松掌握组件启动之MongoDB:快速入门、Linux安装和Docker配置指南
    引言我们将继续深入研究组件启动专题。在之前的文章中,我们已经详细介绍了Redis的各种配置使用方法,为读者提供了全面的指导。然而,今天我们将转向另一个备受关注的数据库——MongoDB。MongoDB是一种流行的NoSQL数据库,具有强大的灵活性和可扩展性。在这篇文章中,我们将探索MongoDB的......