C语言实现快速排序算法
快排作为公认最优秀的排序方法,是每一个程序员都应该掌握的,那么,今天就由我来为大家简单讲解一下快速排序算法的代码。
源代码如下:
#include<stdio.h>
void quicksort(int *a,int left,int right)
{
if(left>right)
{
return ;
}
int i=left;
int j=right;
int key=a[left];
while(i!=j)
{
while(a[j]>=a[left]&&i<j)
{
j--;
}
while(a[i]<=a[left]&&i<j)
{
i++;
}
int s;
s=a[i];
a[i]=a[j];
a[j]=s;
}
a[left]=a[i];
a[i]=key;
quicksort(a,left,i-1);
quicksort(a,i+1,right);
}
int main(void)
{
int a[10]={6,7,8,9,10,5,3,2,4,1,};
quicksort(a,0,9);
int i;
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
}
以下是程序输出图
下面是对于代码的讲解:
先简单讲解一下快速排序的原理,核心思想是递归。在一组数据中,我们先随机找一个数字(本程序中是最左边的数字也就是a[0])然后再利用两个指针i,j从数据二头向中间逼近,我们命名为left和right。left指向最左边,right指向最右边。当i变量找到一个值,这个值大于我们的标识值时,我们就把这个i记录下来,同理,我们再记录一个小于标识值的j,将a[i]与a[j]交换位置,直到i=j;
这是,我们将一开始的标识符与这是的a[i]交换位置,初步的快排就做好了,请注意,我们这里有一个陷阱!我现在这里卖一个关子。
接着利用递归的思想,在标识符左右两端分别进行快排,直到我们的这个left=right为止。
在函数的最开头,表现出来一种渴望,在子程序的递归中,一旦left>right了,nice!quicksort滴任务完成啦,直接return。
确定标识值和copy一下left与right的值,方便下面操作
在i!=j这个大背景下,由于经过我们这个初步的快排之后,标识值左边的数统统小于标识值,标识值右边的数统统大于标识值,所以我们现在就开始找内鬼,有劳i与j了,j由于代表的是right,那么就要把小于标识值的抓到左边去,同理,i把大于标识值的送去右边。两者交换位置。
WARNING
还记得我刚刚卖的关子吗,我们程序的思路是将标识值与i与j值相等的那个数换位置,如果
我们这样进行,先找到左边的,在找到右边的,那么由于第一个循环先结束,i仍然小于j但是我们的这个值a[i]是大于a[left](不满足循环的条件)所以当我们进行交换这一步时,出现了错误,本来标识符左边的值应该统统小于它的,但是来了个内鬼(新换过去的)他的值大于标识值,所以程序出现了错误!
因此,为了避免此类错误,我们应该
快排从右边开始!!!!!
交换位置,完成了初步快排
进行递归,对标识符左边的元素和右边的元素分别在进行快排,直到i=j
程序结束
:)
C语言实现快速排序算法相关推荐
- Go语言编程:Go语言实现快速排序算法
前言 今天用Go语言实现下经典排序算法--快速排序算法.主要是学习了Go语言,得用它来干点事情嘛,就用快速排序来练手.在Go语言语法方面,主要用到 切片数组,for循环(Go语言没有while循环), ...
- 用C语言实现快速排序算法
一.快速排序算法(Quicksort) 1. 定义 快速排序由C. A. R. Hoare在1962年提出.快速排序是对冒泡排序的一种改进,采用了一种分治的策略. 2. 基本思想 通过一趟排序将要排序 ...
- 快速排序算法-c语言实现,快速排序算法实现(C语言)(转)
快速排序算法 的基本思想是:将所要进行排序的数分为左右两个部分,其中一部分的所有数据都比另外一 部分的数据小,然后将所分得的两部分数据进行同样的划分,重复执行以上的划分操作,直 到所有要进行排序的数据 ...
- 数据结构——C语言实现快速排序算法
1.基本思想 先从数列中选取一个数为基准数: 把所有大于基准数的数放在基准数的右边,小于基准数的放在左边: 对上面的数列以上个基准数为轴,分别对左右两个数列再次递归调用函数 ...
- 【经典题】跟着凡人玩转C语言之快速排序算法
- java开发C语言编译器:把C实现的快速排序算法编译成jvm字节码
有了前面一系列的铺垫和准备后,我们终于能走到至关重要的一刻.在本节,我们将用C语言开发快速排序算法,然后利用我们的编译器把它编译成java字节码,让C语言编写的快速排序算法能在java虚拟机上顺利执行 ...
- c语言实现快速排序函数
c语言实现快速排序 众所周知,快速排序在排序算法中时间复杂度较为低,为O(nlogn),而选择,冒泡等排序的时间复杂度均为O(n^2). 所以,现在我们来用c语言实现快速排序算法. 代码如下: #in ...
- 快速排序算法 ( 挖坑法 ) ------- C语言
快速排序: 快速排序,在众多排序算法中有不可或缺的地位. 光听名字就知道,快速排序的时间复杂度应该是要优于其他算法的. 今天这篇博客将和大家一起学习快速排序算法的其中一种实现方法 >> ...
- 快速排序算法 c语言实现
快速排序是一种分治算法,它将一个数组分成两个子数组,将两个子数组分别排序,最终使得整个数组有序. 下面是一个 C 语言实现的快速排序算法: void quick_sort(int *arr, int ...
- 快速排序算法C语言实现
快速排序算法C语言实现 在任何程序中,数组的排序都是极为重要的内容,我们需要按照业务需要对大量的数据进行排序,因此排序的速度或者说效率就显得极为重要了,因此选择一个效率较高的算法可以大大提升程序的性能 ...
最新文章
- C# ASP.Net 设置外网访问
- 【集训心得】在真哥强迫下不得不写的总结
- js技巧笔记(不断更新)
- c#连接mysql数据库,增删查改命令执行
- 五分钟教会如何计算CAN总线负载率,包学包会
- 大泡沫.一切从广场协议开始 俞天任 读后总结
- 自建公众号服务器开发教程,01-微信公众号开发入门篇
- VR,“看房”容易“卖房”难
- Xposed FrameWork v89 安装
- 客服在线咨询工具|即时聊天客服系统下载安装(包含APP)
- 巴菲特致股东的一封信:2001年
- 应用性能管理APM巅峰对决:skywalking P.K. Pinpoint
- MySQL中json_extract()函数的用法实例
- html 中圆角怎么写,html中的圆角
- 李建忠设计模式(二)
- python内置函数 blool()
- 目前最完美的Windows Server 2008企业版激活方法
- DDPG中的Ornstein-Uhlenbeck过程怎么理解
- 阿里云学生服务器专注于学生搭建个人博客
- 2022年无形资产估值工具和方法研究报告