快速排序算法(C语言实现)
快速排序分三大步骤:
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语言实现)相关推荐
- 快速排序算法C语言实现
快速排序算法C语言实现 在任何程序中,数组的排序都是极为重要的内容,我们需要按照业务需要对大量的数据进行排序,因此排序的速度或者说效率就显得极为重要了,因此选择一个效率较高的算法可以大大提升程序的性能 ...
- 快速排序实验报告 c语言,快速排序算法c语言实验报告.docx
快速排序算法c语言实验报告 实验六:冒泡法排序 物理学416班赵增月F12XX日期:XX年10月31日 一·实验目的1.熟练掌握程序编写步骤: 2.学习使用冒泡法和选择法排序: 3.熟练掌握数组的定义 ...
- 快速排序算法 c语言实现
快速排序是一种分治算法,它将一个数组分成两个子数组,将两个子数组分别排序,最终使得整个数组有序. 下面是一个 C 语言实现的快速排序算法: void quick_sort(int *arr, int ...
- 随机快速排序算法(C语言)
随机快速排序(C语言) 分治法基本思想 将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同.递归的解决这些子问题,然后将各个子问题的解合并得到原问题的解. 快速排序 原链 ...
- 快速排序算法-c语言实现,快速排序算法实现(C语言)(转)
快速排序算法 的基本思想是:将所要进行排序的数分为左右两个部分,其中一部分的所有数据都比另外一 部分的数据小,然后将所分得的两部分数据进行同样的划分,重复执行以上的划分操作,直 到所有要进行排序的数据 ...
- 快速排序算法c语言lomuto,快速排序(N.Lomuto版)
这个版本的快速排序是由N.Lomuto提出来的. 基本排序步骤如下图所示: /* * 名 称: 快速排序 * 作 者: Brooke gao * 日 期: 2013/6/17 * */ #includ ...
- Go语言编程:Go语言实现快速排序算法
前言 今天用Go语言实现下经典排序算法--快速排序算法.主要是学习了Go语言,得用它来干点事情嘛,就用快速排序来练手.在Go语言语法方面,主要用到 切片数组,for循环(Go语言没有while循环), ...
- c语言快速排序_Damp;C思想-快速排序算法
只能解决一种问题的算法,用处必然是有限的.所以今天介绍一种解决问题的思路,一个可以让我们使用的工具.Divide and Conquer 分而治之 先来说明一下D&C的工作原理: (1) 找出 ...
- 快速排序算法 ( 挖坑法 ) ------- C语言
快速排序: 快速排序,在众多排序算法中有不可或缺的地位. 光听名字就知道,快速排序的时间复杂度应该是要优于其他算法的. 今天这篇博客将和大家一起学习快速排序算法的其中一种实现方法 >> ...
最新文章
- wps底纹去不掉_汽车异味总是去不掉?建议车主试试这5个办法,空气清新又好闻...
- 华夏基金专访神策数据创始人兼 CEO 桑文锋,金融科技数字化趋势认知传递
- ES6箭头函数(节选自《ECMAScript 6 入门》)
- 助AI研究社群发出内建18种预先训练模型工具
- idea修改jdk的版本号
- Spring Cloud Sleuth + Zipkin + RabbitMQ 监控微服务应用(二)
- 随想录(英语学习的几个误区)
- Ansible tower 3.7.0-4自动化运维管理安装方法
- 【数据库系统】C#窗体应用显示用户sa登录失败
- 微信调整字体大小 html,H5禁止微信内置浏览器调整字体大小
- datawhale8月组队学习《pandas数据处理与分析》(下)(文本、分类、时序数据)
- 【NOIP2017提高A组冲刺11.2】救赎(数学期望)
- 华为魔术2手机拆机图解_荣耀Magic2做工如何?荣耀Magic2拆解图解评测 (全文)
- vue中父传子和子传父,传值方法
- 微信公众平台如何授权第三方平台,干货到!微信公众号怎样添加第三方平台及取消授权
- 5个开源免费的Java项目快速开发脚手架
- PDF技术(四)-Java实现Html转PDF文件
- 谦逊、踏实的低头做事,每日反思。——送给自己。
- ElementUI中InfiniteScroll无法控制自动加载问题的解决
- 关于配置双数据源报错org.apache.ibatis.binding.BindingException: Type interface is not known to the MapperRegis