zoukankan      html  css  js  c++  java
  • 【C/C++】快速排序的两种实现思路

    方法一:不断填坑,一次确定一个值。http://blog.csdn.net/morewindows/article/details/6684558

    #include<stdio.h>
    
    void qsort(int *array, int len)
    {
        int value, start, end;
        if (len <= 1) 
            return; 
        value = array[0]; 
        start = 0; 
        end = len - 1; 
        while (start < end) { 
            for (; start < end; --end) { 
                if (array[end] < value) { 
                    array[start++]=array[end];  
                    break; 
                } 
            } 
            for (; start < end; ++start) { 
                if (array[start] > value)
                {
                    array[end--]=array[start]; 
                    break;
                }
            }
        }
         array[start]=value; 
        qsort(array, start );
        qsort(array+start+1 , len-start-1 );
    }
    
    int main()
    {
    int a[10]={9,8,7,3,4,5,6,1,2,0};
    qsort(a,10);
    int i;
    for(i = 0; i < 10; i++)
    {
    printf("%d ", a[i]);
    } 
    }

    方法二:一次找到两个值交换 http://developer.51cto.com/art/201403/430986.htm

    #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) 
                       { 
                                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);//继续处理右边的 ,这里是一个递归的过程 
    } 
    int main() 
    { 
        int i,j,t; 
        //读入数据 
        scanf("%d",&n); 
        for(i=1;i<=n;i++) 
                       scanf("%d",&a[i]); 
        quicksort(1,n); //快速排序调用 
                                 
        //输出排序后的结果 
        for(i=1;i<=n;i++) 
            printf("%d ",a[i]); 
        getchar();getchar(); 
        return 0; 
    } 
  • 相关阅读:
    OCM_Session1_2_Server-side Network Configuration
    sql union代替or
    创建组合索引SQL从1个多小时到1S的案例
    OCM_session0手动建库实验
    慎用位图索引
    Java之List排序
    Java之List排序出错
    dojo、iframe和FusionCharts兼容性
    Java之indexOf()方法
    Java之split()方法
  • 原文地址:https://www.cnblogs.com/dplearning/p/4655264.html
Copyright © 2011-2022 走看看