码迷,mamicode.com
首页 > 编程语言 > 详细

算法学习之快速排序的C语言实现

时间:2017-09-09 00:47:33      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:第一个   大于   tail   --   主程   for   运行时间   png   c语言   

近几天在学习简单算法,今天看了一个快速排序和堆排序,堆排序还没搞懂,还是先把快速排序搞清楚吧

教程网上一艘一大堆,这里选择一个讲的比较通俗的的一个吧:

http://blog.csdn.net/morewindows/article/details/6684558

于是我就模仿着谢了完整的代码,实现很好。

另外,为了 测量程序运行的时间,加了测试代码。好了,废话不多说。

//快速排序实现 
 
#include "stdio.h"
#include "stdlib.h"
#include "time.h"//用于获取程序运行时间  

void quick_sort(int s[],int l,int r)
{
    if(l < r)
    {
        int i=l,j=r,x=s[l];
        while(i<j)
        {
            while(i<j && s[j]>=x)//从右到左找到第一个小于x的数  
                j--;
            if(i<j)
                s[i++]=s[j];
            
            while(i<j && s[i]<=x)//从左往右找到第一个大于x的数  
                i++;
            if(i<j)
                s[j--]=s[i]; 
            
        }
        
        s[i]=x;//i = j的时候,将x填入中间位置  
        quick_sort(s,l,i-1);//递归调用 
        quick_sort(s,i+1,r);        
    }
}


int main()
{
    clock_t start,finish;
    double totaltime;
    start=clock();
    
    /****下面为需要运行的主程序****/ 
    
    int a[] = {1,8,44,77,35,65,78,12,25,455,20,15,45};
    int length = sizeof(a)/sizeof(int);//求数组的长度  
    
    printf("原序列为: ");
    for(int i=0;i<length;i++)
    {
        printf("%3d",a[i]);
    }
    
    quick_sort(a,0,length);
    
    printf("\n排序后的序列为:");
    for(int i=0;i<length;i++)
    {
        printf("%3d",a[i]);
    }

    /********************************/
        
   finish=clock();
   totaltime=(double)(finish-start)/CLOCKS_PER_SEC;
   
   printf("\n程序运行的时间为: %.5f 秒",totaltime);

}

 

运行结果:

技术分享

 

算法学习之快速排序的C语言实现

标签:第一个   大于   tail   --   主程   for   运行时间   png   c语言   

原文地址:http://www.cnblogs.com/qsyll0916/p/7496886.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!