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