快速排序分三大步骤:
1.分:选择一个分割值并将数据按此分为左右两部分
2.治:分别在两部分用递归方式调用上述的分步骤,继续划分
3.合:对分割的部分排序直至完成

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int partion(char *s,int start,int end)
{//随机选取分割值int key = s[start];int temp;while(1){while(s[start] < key && (start < end) ){ //从左边开始遍历,当小于分割值,则留在左边start++;              }while(s[end] > key && (end > start)){  //从右边开始遍历,当大于分割值,则留在右边end--;}if(start >= end){ //分割值的位置已确定,左边的都小于分隔值,右边的都大于或等于分隔值break;}else {//找到本该在右边的start元素值,和本该在左边的end元素值,对他们进行交换temp = s[start];s[start] = s[end];s[end] = temp;              }if(s[end] == s[start]){//当左右两边的元素相当,则不用交换位置,将左边的遍历的位置向右边移动开始新一轮的遍历start++;}}//此时start=end,为分隔值所在的位置return start;
}int my_qsort(char *s,int start,int end)
{if(start < end){int k = partion(s,start,end);my_qsort(s,start,k-1); //继续排序分割值的左边my_qsort(s,k+1,end);   //继续排序分割值的右边}
}int main(int argc,char *argv[]){char *str;int num=100;if(argv[1]!=NULL)num = atoi(argv[1]);printf("num:%d\n",num);//随机生成长度为num的字符串str = malloc(num);for(int i = 0;i < num;i++ ){str[i] = rand()%10 + '0';}printf("src str:%s,len:%d.\n",str,strlen(str));my_qsort(str,0,strlen(str)-1);printf("sort str:%s.\n",str);free(str);return 0;
}

随机生成长度为100的字符串,然后对字符进行排序:

快速排序算法(C语言实现)相关推荐

  1. 快速排序算法C语言实现

    快速排序算法C语言实现 在任何程序中,数组的排序都是极为重要的内容,我们需要按照业务需要对大量的数据进行排序,因此排序的速度或者说效率就显得极为重要了,因此选择一个效率较高的算法可以大大提升程序的性能 ...

  2. 快速排序实验报告 c语言,快速排序算法c语言实验报告.docx

    快速排序算法c语言实验报告 实验六:冒泡法排序 物理学416班赵增月F12XX日期:XX年10月31日 一·实验目的1.熟练掌握程序编写步骤: 2.学习使用冒泡法和选择法排序: 3.熟练掌握数组的定义 ...

  3. 快速排序算法 c语言实现

    快速排序是一种分治算法,它将一个数组分成两个子数组,将两个子数组分别排序,最终使得整个数组有序. 下面是一个 C 语言实现的快速排序算法: void quick_sort(int *arr, int ...

  4. 随机快速排序算法(C语言)

    随机快速排序(C语言) 分治法基本思想 将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同.递归的解决这些子问题,然后将各个子问题的解合并得到原问题的解. 快速排序 原链 ...

  5. 快速排序算法-c语言实现,快速排序算法实现(C语言)(转)

    快速排序算法 的基本思想是:将所要进行排序的数分为左右两个部分,其中一部分的所有数据都比另外一 部分的数据小,然后将所分得的两部分数据进行同样的划分,重复执行以上的划分操作,直 到所有要进行排序的数据 ...

  6. 快速排序算法c语言lomuto,快速排序(N.Lomuto版)

    这个版本的快速排序是由N.Lomuto提出来的. 基本排序步骤如下图所示: /* * 名 称: 快速排序 * 作 者: Brooke gao * 日 期: 2013/6/17 * */ #includ ...

  7. Go语言编程:Go语言实现快速排序算法

    前言 今天用Go语言实现下经典排序算法--快速排序算法.主要是学习了Go语言,得用它来干点事情嘛,就用快速排序来练手.在Go语言语法方面,主要用到 切片数组,for循环(Go语言没有while循环), ...

  8. c语言快速排序_Damp;C思想-快速排序算法

    只能解决一种问题的算法,用处必然是有限的.所以今天介绍一种解决问题的思路,一个可以让我们使用的工具.Divide and Conquer 分而治之 先来说明一下D&C的工作原理: (1) 找出 ...

  9. 快速排序算法 ( 挖坑法 ) ------- C语言

    快速排序: 快速排序,在众多排序算法中有不可或缺的地位. 光听名字就知道,快速排序的时间复杂度应该是要优于其他算法的. 今天这篇博客将和大家一起学习快速排序算法的其中一种实现方法  >>  ...

最新文章

  1. wps底纹去不掉_汽车异味总是去不掉?建议车主试试这5个办法,空气清新又好闻...
  2. 华夏基金专访神策数据创始人兼 CEO 桑文锋,金融科技数字化趋势认知传递
  3. ES6箭头函数(节选自《ECMAScript 6 入门》)
  4. 助AI研究社群发出内建18种预先训练模型工具
  5. idea修改jdk的版本号
  6. Spring Cloud Sleuth + Zipkin + RabbitMQ 监控微服务应用(二)
  7. 随想录(英语学习的几个误区)
  8. Ansible tower 3.7.0-4自动化运维管理安装方法
  9. 【数据库系统】C#窗体应用显示用户sa登录失败
  10. 微信调整字体大小 html,H5禁止微信内置浏览器调整字体大小
  11. datawhale8月组队学习《pandas数据处理与分析》(下)(文本、分类、时序数据)
  12. 【NOIP2017提高A组冲刺11.2】救赎(数学期望)
  13. 华为魔术2手机拆机图解_荣耀Magic2做工如何?荣耀Magic2拆解图解评测 (全文)
  14. vue中父传子和子传父,传值方法
  15. 微信公众平台如何授权第三方平台,干货到!微信公众号怎样添加第三方平台及取消授权
  16. 5个开源免费的Java项目快速开发脚手架
  17. PDF技术(四)-Java实现Html转PDF文件
  18. 谦逊、踏实的低头做事,每日反思。——送给自己。
  19. ElementUI中InfiniteScroll无法控制自动加载问题的解决
  20. 关于配置双数据源报错org.apache.ibatis.binding.BindingException: Type interface is not known to the MapperRegis

热门文章

  1. (一)initServerConfig 初始化服务配置
  2. 网商软件荣获360软件安全认证中心认证 实力见证
  3. Linux 修改主机名的两种方法
  4. iOS安全攻防之越狱设备检测
  5. 浅析前端状态管理Redux Mobx Vuex
  6. 如何用css进行网页布局,用CSS进行网页布局的教程
  7. 网络流(一)最大流问题EdmondsKarp和最小费用最大流
  8. java图书管理系统(前后端分离前)
  9. CCR量化:什么是区块链共识算法?
  10. 2019ccpc河北省大学生程序设计竞赛总结