c语言实现快速排序算法(直接给出数组,从文件中读取的方法后续会贴出来)
来源:互联网 发布:2016淘宝可以刷单吗 编辑:程序博客网 时间:2024/04/30 08:18
#include<unistd.h>#include<stdlib.h>#include<stdio.h>int quicksort(int a[],int numsize){int i,j,val;i = 0;j = numsize -1;val = a[0];if(numsize > 1)//数组长度大于1{//确定最初始的val所在位置,然后通过分治思想将数组分成两部分再来确定while(i < j){for( ; j > i ; j-- )//从后往前找出比val小的值前移{ if( val > a[j]){a[i++] = a[j];break;}}for( ; i < j ; i ++ )//从前往后找出比val大的值后移{if(val < a[i]){a[j--] = a[i];break;}}}a[i] = val;//将空出来的a[i]赋值quicksort(a,i);quicksort(a+i+1,numsize-i-1);}}int main(){int a[8] = {49,38,65,97,76,13,27,49};int i = 0;quicksort(a,8);for(i = 0; i < 8; i++){printf("%d\n",a[i]);}return 0;}
有关快速排序算法百度百科上介绍的不少,我的代码也是借鉴了百度的,针对这段代码,下面是我的具体分析:
49,38,65,97,76,13,27,49
这串数字为也不记得是不是摘的数据结构书上的,废话不多说,具体分析
这串数字长度为8,数组名a;
进入quicksort函数后,首先i=0,因此第一趟排序的val值为49;
val
i=0 j=9
49,38,65,97,76,13,27,49
i<j --> val>a[j]不成立 --> j--即j=8
49,38,65,97,76,13,27,49
val=49>a[j]
49,38,65,97,76,13,27,49
a[i]=a[j]
27,38,65,97,76,13,27,49
……
直至确定val位置后,将该数组分成两部分,即比val大的一部分数组和比val小的一部分数组,再继续递归调用
原理基本上就这样的,然后还有一个快排函数
qsort();
int comp(const void *a , const void *b){return *(int*)a - *(int*)b;}
main函数中调用方法如下
qsort(a,n
,sizeof(int),comp);
a即数组名
n数组长度
偶然翻起前面的作业发现快排忘了,所以抠出来,希望大家多多指教
0 0
- c语言实现快速排序算法(直接给出数组,从文件中读取的方法后续会贴出来)
- C语言实现数组快速排序算法
- C语言——快速排序——从文件中读取结果输出到文件
- C语言实现数组快速排序(含对算法的详细解释)
- C语言实现数组快速排序(含对算法的详细解释)
- 快速排序算法的c语言实现
- 快速排序算法的C语言实现
- 【算法】C语言实现的快速排序
- 快速排序算法的C语言实现
- 快速排序算法的C语言实现
- C语言快速排序算法的实现
- 快速排序算法的C语言实现
- 快速排序算法的C语言实现
- 快速排序算法(C语言实现)
- C语言实现基本排序算法----排序(直接插入排序,SHELL排序,冒泡排序,快速排序,简单选择排序,堆排序)
- 直接插入排序算法--c语言实现
- 【算法】直接插入排序C语言实现
- 排序算法的C语言实现-快速排序
- 软件架构师应该知道的97件事
- 嵌入式程序员应该知道的问题
- Android HorizontalScrollView 点滴
- Android weixin service
- 三星s5pv210 串口 通信RS232工作
- c语言实现快速排序算法(直接给出数组,从文件中读取的方法后续会贴出来)
- android 自定义日期输入 EditText
- ATS系列之插件编写步骤
- SocketChannel类(用于阻塞或非阻塞式传输数据) 创建SocketChannel要使用SocketChannel类的静态工厂方法。 SocketChannel open():创建未连接的
- HTML实体字符
- 体验C#——试试泛型集合
- s回调函数(callback)
- Unity3d-反编译C#和提取资源
- Yii framework2 gii配置