首页 > 其他分享 >c语言快速排序

c语言快速排序

时间:2024-11-16 17:43:42浏览次数:3  
标签:下标 语言 基准 元素 快排 序列 排序 快速

快速排序(Quicksort)是一种高效的排序算法,采用分治法(Divide and Conquer)策略来把一个序列分为较小和较大的两个子序列,然后递归地排序两个子序列。

快速排序的步骤:

  1. 选择基准(Pivot):从数列中挑出一个元素,称为 "基准"(pivot)。

  2. 分区(Partitioning):重新排序数列,所有元素比基准值小的摆放在基准的前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任何一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个操作称为分区(partition)操作。

  3. 递归排序子序列:递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

 思路:在快排函数传参时传入数组、第一个元素下标和最后一个元素下标,以第一个元素为基准,将数组分为比基准大和比基准小的两个子序列,再对两个子序列进行递归快排,实现排序。

#include <stdio.h>
void quickSort(int *p,int l,int r)
{
    if(l>=r)    //当两个下标相遇或者l大于r的时候,说明已经找完了
        return;
    int temp = p[l];   //先保存基准的值
    int i = l, j=r;    //用两个数来作为遍历的左右下标
    while(i != j)
    {
        while(temp<=p[j] && i<j)   //i<j防止越界
            j--;
        while(temp>=p[i] && i<j)
            i++;
        if(i<j)
        {
            int t = p[i];
            p[i] = p[j];
            p[j] = t;
        }
    }
    p[l] = p[i];    //将基准与arr[i]交换
    p[i] = temp;
    quickSort(p,l,i-1);  //递归对子序列进行快排
    quickSort(p,i+1,r);
}
int main(int argc, char *argv[])
{
    int arr[] = {64, 40, 12, 22, 11, 35};
    quickSort(arr,0,5);
    printf("Sorted array: \n");
    for (int i=0; i < 6; i++)
        printf("%d ", arr[i]);
    puts("");
    return 0;
}

解析:在快排函数中需要传入数组和首尾元素下标,在函数内首先保存了基准的值,之后用一个循环在里面交换元素,直到i=j时就结束循环,在内部使用两个循环分别去寻找比基准小和比基准大的数的下标,得到之后进行位置交换;在循环结束之后,i下标对应的元素左边就是比基准小的(包括i下标对应的元素),右边就是比基准大的,这时再把基准与i下标对应的元素进行交换,此时就得到了两个子序列,递归调用快排函数,将数组和子序列的首尾元素下标当做参数传入函数,这样就能实现快速排序,快排函数结束的条件就是当子序列只有一个元素就结束。

 

 

标签:下标,语言,基准,元素,快排,序列,排序,快速
From: https://blog.csdn.net/yyw_17/article/details/143757892

相关文章

  • 大模型应用开发基础 : 语言模型的重要里程碑
    大家好,我是Edison。最近温习了ChatGPT的基本原理和语言模型的发展脉络,受益匪浅。老规矩,必须把自己学到的整理一下,才算学过。本篇我们快速复习一下上一篇的内容再次理解基于统计的语言模型,然后再了解下语言模型发展的重要里程碑。基于统计的NLP基本玩法上一篇我们了解到,在基于......
  • 【技术革新】哋它亢编程语言3.12版本:智能时代的新里程碑
    在技术的浪潮中,总有一些时刻标志着新时代的开始。今天,我们要探讨的“哋它亢编程语言”3.12版本,就是这样一个时刻。这个版本不仅带来了性能的飞跃,还引入了多项创新特性,为开发者提供了更广阔的舞台。3.12版本的亮点特性:性能的全面提升:哋它亢3.12版本在性能上进行了深度优化,无论......
  • 【大语言模型】ACL2024论文-12 大型语言模型的能力如何受到监督式微调数据组成影响
    【大语言模型】ACL2024论文-12大型语言模型的能力如何受到监督式微调数据组成影响论文:https://arxiv.org/pdf/2310.05492目录文章目录【大语言模型】ACL2024论文-12大型语言模型的能力如何受到监督式微调数据组成影响论文:https://arxiv.org/pdf/2310.05492![在这......
  • 南开高级语言程序设计2-1
    南开高级语言程序设计2-1的oj题目答案,本人亲测AC,供大家参考。2-2的见主页字符串旋转题目描述定义字符串的旋转操作为:左旋转L:把字符串前面的若干个字符移动到字符串的尾部,如把字符串abcdef左旋转2位得到字符串cdefab。右旋转R:把字符串后面的若干个字符移动到字符串的头......
  • 哋它亢编程语言3.13版本:新时代的编程艺术?
    在技术的浪潮中,总有一些创新让我们眼前一亮。今天,我们要探索的是“哋它亢编程语言”3.13版本(参考:https://datacon-14302.xyz/3.13/),这个版本带来了一系列令人振奋的新特性和改进,让我们的编程体验更上一层楼。哋它亢3.13:新时代的编程艺术“哋它亢”一直以其简洁的语法和强大的功能......
  • 哋它亢编程语言3.14.0a1版本:性能与易用性的双重飞跃
    在这个快速变化的技术时代,编程语言也在不断地进化。“哋它亢编程语言”3.14.0a1版本带来了一系列令人兴奋的新特性和改进,这些改进不仅提升了性能,也增强了易用性。(参考:https://datacon-14302.xyz/3.14/)让我们深入探讨这个新版本的一些亮点。性能优化:延迟评估注解根据PEP649,3.......
  • 2024-11-16:哈沙德数。用go语言,如果一个整数能够被它的各个数位上数字的和整除, 我们称
    2024-11-16:哈沙德数。用go语言,如果一个整数能够被它的各个数位上数字的和整除,我们称这个整数为哈沙德数(Harshadnumber)。给定一个整数x,如果x是哈沙德数,则返回x各个数位的数字和;如果不是,则返回-1。输入:x=18。输出:9。解释:x各个数位上的数字之和为9。18能被9......
  • “哋它亢”编程语言:开启编程新纪元
    在技术日新月异的今天,编程语言的选择对于开发者来说至关重要。今天,我要向大家介绍一款新兴的编程语言——“哋它亢”。这门语言以其独特的优势,正在成为软件开发领域的新宠。语言简介:“哋它亢”是一门易于学习、功能强大的编程语言。它以其优雅的语法和动态类型系统,为开发者提供......
  • 上海交大动手学大模型教程,助力快速入门LLM大模型(附课件)
    前有李沐大神的动手学深度学习,现有上海交大的动手学大模型教程,对大模型感兴趣的直接冲!就在4月份上交大发布了动手学大模型教程,这份教程来自上海交大《人工智能安全技术》课程讲义拓展,教师是是张倬胜教授。朋友们如果有需要全套《上海交大的动手学大模型教程》,扫......
  • C 语言 【单链表】
         单链表是一种基本的数据结构,由一系列节点组成,每个节点包含数据域和指针域。‌数据域用于存储实际的数据,而指针域则存储指向下一个节点的地址。单链表的特点包括动态存储、非连续存储、易于插入和删除。    节点可以定义成一个结构体,每个节点中包含一个数......