首页 > 其他分享 >快速排序C实现

快速排序C实现

时间:2023-10-26 19:22:23浏览次数:24  
标签:arr 实现 high int while low 排序 快速

在数据结构中的快速排序实现,未将原数组排序为递增或递减的序列,该C语言通过指针将原数组进行了改变。

low和high的数值交换:

void Swap(int *a,int *b)
{
    int p=*b;
    *b=*a;
    *a=p;
}

Partition(分区函数):通过内层while可看出快速排序不是稳定排序算法

int Partition(int *arr,int low,int high)
{
    int *pivot=&arr[low];
    while(low<high)
    {
        while(low<high&&arr[high]>*pivot)
            high--;
        while(low<high&&arr[low]<*pivot)
            low++;
        Swap(&arr[low],&arr[high]);    
    }
    Swap(pivot,&arr[low]);    
    return low;
}

QuickSort函数:

void QuickSort(int arr[],int low,int high)
{
    if(low<high)
    {
        int pivotpos=Partition(arr,low,high);
        
        QuickSort(arr,low,pivotpos-1);
        QuickSort(arr,pivotpos+1,high);
    }
}

 

完整代码:

#include <stdio.h>

void Swap(int *a,int *b)
{
    int p=*b;
    *b=*a;
    *a=p;
}

int Partition(int *arr,int low,int high)
{
    int *pivot=&arr[low];
    while(low<high)
    {
        while(low<high&&arr[high]>*pivot)
            high--;
        while(low<high&&arr[low]<*pivot)
            low++;
        Swap(&arr[low],&arr[high]);    
    }
    Swap(pivot,&arr[low]);    
    return low;
}

void QuickSort(int arr[],int low,int high)
{
    if(low<high)
    {
        int pivotpos=Partition(arr,low,high);
        
        QuickSort(arr,low,pivotpos-1);
        QuickSort(arr,pivotpos+1,high);
    }
}

int main()
{
    int arr[10]={3,5,4,7,6,8,9,1,0,2};
    int i;
    for(i=0;i<10;i++)
        printf("%d",arr[i]);
    printf("\n");
    QuickSort(arr,0,9);
    for(i=0;i<10;i++)
        printf("%d",arr[i]);
    return 0;
}

 

标签:arr,实现,high,int,while,low,排序,快速
From: https://www.cnblogs.com/simpleset/p/17790170.html

相关文章

  • 数智化推送助力用户精准分层,MobPush是如何实现用户价值变现的
    随着移动设备普及,移动应用市场日益趋于饱和,传统的拉新促活、提升APP用户数,利用庞大的用户流量带来的广告收入、第三方合作等方式实现价值变现的路径已越来越窄,拉新促活成本的高企不下进一步限制了这种价值增长方式的可行性。因此,如何通过精准的用户分层,识别潜在的高价值、高粘度、......
  • vue处理文件流实现上传下载
    1.文件流转base64axios({method:"post",url:"************",responseType:"blob",//必须将返回数据格式更改为blob格式}).then(res=>{//处理返回的文件流数据转为blob对象letblob=......
  • 通过反射获取事件Event并实现方法
    C#EventInfo.AddEventHandler方法代码示例EventInfo.AddEventHandler(Object,Delegate)Method(System.Reflection)|MicrosoftLearn//引入命名空间usingSystem;usingSystem.Reflection;usingSystem.Reflection.Emit;publicclassExample{privatestatico......
  • 深度解读MediaBox SDKs如何实现技术架构升级
    本专栏将分享阿里云视频云MediaBox系列技术文章,深度剖析音视频开发利器的技术架构、技术性能、开发能效和最佳实践,一起开启音视频的开发之旅。本文为MediaBox技术架构篇,重点从音视频终端SDK的技术架构、优化设计、架构优势等方面,介绍MediaBoxSDKs如何实现技术架构升级。善师|作者......
  • Python threading实现多线程 提高篇 线程同步,以及各种锁
    本文主要讲多线程的线程之间的资源共享怎么保持同步。多线程基础篇见,Pythonthreading实现多线程基础篇Python的多线程,只有用于I/O密集型程序时效率才会有明显的提高,如文件/输入输出/socket网络通信/http通讯等待。对于计算密集型程序一般采用多进程,这里不多讲。一、多线程的......
  • node+mysql+express实现登录/注册/修改密码/删除用户 接口
    实现用户的注册、登录、修改密码、删除用户操作用到的数据库:nodecms;表:user目录结构:db目录下存放数据库操作语句:userSQL.js用户有关的操作语句router目录接口路由文件user.js用户接口路由connect.js数据库连接index.html前端测试页面index.js入口文件package.js......
  • 深度解读MediaBox SDKs如何实现技术架构升级
    本专栏将分享阿里云视频云MediaBox系列技术文章,深度剖析音视频开发利器的技术架构、技术性能、开发能效和最佳实践,一起开启音视频的开发之旅。本文为MediaBox技术架构篇,重点从音视频终端SDK的技术架构、优化设计、架构优势等方面,介绍MediaBoxSDKs如何实现技术架构升级。:::hlj......
  • Java map详解 - 用法、遍历、排序、常用API等
    java.util中的集合类包含Java中某些最常用的类。最常用的集合类是List和Map。Map提供了一个更通用的元素存储方法。Map集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。本文主要介绍javamap的初始化、用法、map的四种常用的遍历方式、map的排序以及常用ap......
  • 模拟实现常见的strlen、strcpy、strcmp库函数,深入理解它们的原理
    ⛩️博主主页:@威化小餅干......
  • 防止同学内卷,关机整蛊小程序 ---(C语言实现)
    ⛩️博主主页:@威化小餅干......