• 快速排序


    排序在各种场合经常被用到。

    快速排序是十分常用的高效率的算法。

    其思想是:先选一个“标尺”,

    用它把整个队列过一遍筛子,

    以保证:其左边的元素都不大于它,其右边的元素都不小于它。

    这样,排序问题就被分割为两个子区间。

    再分别对子区间排序就可以了。

    下面的代码是一种实现,请分析并填写划线部分缺少的代码。

    #include <stdio.h>
    
    void swap(int a[], int i, int j)
    {
    	int t = a[i];
    	a[i] = a[j];
    	a[j] = t;
    }
    
    int partition(int a[], int p, int r)
    {
        int i = p;
        int j = r + 1;
        int x = a[p];
        while(1){
            while(i<r && a[++i]<x);
            while(a[--j]>x);
            if(i>=j) break;
            swap(a,i,j);
        }
    	#########(11);//填空位置
        return j;
    }
    
    void quicksort(int a[], int p, int r)
    {
        if(p<r){
            int q = partition(a,p,r);
            quicksort(a,p,q-1);
            quicksort(a,q+1,r);
        }
    }
    
    int main()
    {
    	int i;
    	int a[] = {5,13,6,24,2,8,19,27,6,12,1,17};
    	int N = 12;
    	
    	quicksort(a, 0, N-1);
    	
    	for(i=0; i<N; i++) printf("%d ", a[i]);
    	printf("
    ");
    	
    	return 0;
    }
    

    注意:只填写缺少的内容,不要书写任何题面已有代码或说明性文字。

    C/C++组 答案4 (11分)

    看partition函数,首先让i=p,然后循环里,我们发现直接把p位置空过去了,所有交换的ij中都是p后边的位置,p处的值才是比较基准,i最后要么到达r+1,要么就是所存值比基准大,j要么是到了p位置,要么所存值比基准小,最后交换j处的值和基准即可。

  • 相关阅读:
    ssh REMOTE HOST IDENTIFICATION HAS CHANGED!
    pipenv+sublime text3 配置
    华硕N55SF 折腾记
    vscode 的tab与空格设置
    kbenigne学习3 get-started 2创建实体
    设置数据编码
    jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题
    jquery与其他js冲突
    php取整
    IE8 indexOf
  • 原文地址:https://www.cnblogs.com/8023spz/p/10440230.html
Copyright © 2020-2023  润新知