• 和我一起从0学算法(C语言版)(二)


    第一章 排序

    第三节 快速排序

    快速排序是最常用的排序方法。快排运用的递归方法很有意思。掌握了这种排序方法可以在将来学习递归时更快入门。只是快排的思路与之前的排序方法相比较为复杂,再加担心上我的表达能力会让让大家产生误解,所以推荐大家去看大牛的博客,我只给出代码,如果有不懂的同学,可以在评论留下问题,我会尽快回答的。

    #include<stdio.h>
    int a[101],n; // 定义全局变量,这两个变量需要在子函数中使用
    
    void quicksort(int left,int right) {
        int i,j,t,temp;
        if(left>right)
        	return;
    
    	temp=a[left];  // temp中存的就是基准数
        i = left;
        j = right;
        while (i != j) {
        	// 顺序很重要,要先从右往左找
    		while (a[j]>=temp && i<j)
    			j--;
    		// 再从左往右找
    		while (a[i]<=temp && i<j)
        		i++;
        		
        	// 交换两个数在数组中的位置
    	    if (i<j) {  // 当哨兵i和哨兵j没有相遇时
    		    t=a[i];
    		a[i]=a[j];
    		a[j]=t; 
        	} 
        } 
        // 最终将基准数归位 
        a[left]=a[i];
        a[i]=temp;
    
    	quicksort(left,i-1); // 继续处理左边的,这里是一个递归过程
    	quicksort(i+1,right); // 继续处理右边的,这里是一个递归过程 
    	return;
    } 
    
    int main() {
    	int i,j;
    	// 读入数据
    	scanf("%d",&n); // n代表有n个数据需要排序 
    	for(i=0;i<n;i++)
    		scanf("%d",&a[i]);
    		
    	quicksort(0,n-1); // 快速排序调用
    
        // 输出排序后的结果
    	for(i=0;i<n;i++) 
    		printf("%d ",a[i]);
    	
    	return 0; 
    }
    

    看上去是有点长,但是抽点时间研究下很好懂的。

    以上。

  • 相关阅读:
    3.css3文字与字体
    2.css3表示颜色的几种方式
    测试ssh转发
    硬盘相关合集,以及LVM操作实践
    linux硬件驱动
    启动nfs清除端口占用过程
    postgres10.2时区研究
    git submodule临时分支;以及git reset使用
    sudo环境变量问题;程序库函数寻找
    linuxI/O重定向
  • 原文地址:https://www.cnblogs.com/mxwbq/p/6686209.html
Copyright © 2020-2023  润新知