zoukankan      html  css  js  c++  java
  • 各种排序_续()

    例一:快速排序

    #include <stdio.h>
    int AdjustArray(int s[], int l, int r) //返回调整后基准数的位置  
    {  
        int i = l, j = r;  
        int x = s[l]; //s[l]即s[i]就是第一个坑  
        while (i < j)  
        {  
            // 从右向左找小于x的数来填s[i]  
            while(i < j && s[j] >= x)   
                j--;    
            if(i < j)   
            {  
                s[i] = s[j]; //将s[j]填到s[i]中,s[j]就形成了一个新的坑  
                i++;  
            }  
      
            // 从左向右找大于或等于x的数来填s[j]  
            while(i < j && s[i] < x)  
                i++;    
            if(i < j)   
            {  
                s[j] = s[i]; //将s[i]填到s[j]中,s[i]就形成了一个新的坑  
                j--;  
            }  
        }  
        //退出时,i等于j。将x填到这个坑中。  
        s[i] = x;  
      
        return i;  
    }  
    void quick_sort1(int s[], int l, int r)  
    {  
        if (l < r)  
        {  
            int i = AdjustArray(s, l, r);//先成挖坑填数法调整s[]  
            quick_sort1(s, l, i - 1); // 递归调用   
            quick_sort1(s, i + 1, r);  
        }  
    }  
    int main()
    {
        int array[10]={1,2,3,9,8,7,5,6,4,12};
        quick_sort1(array,0,9);
        int i;
        for(i=0;i<10;i++)
        {
        printf("%d ",array[i]);        
        }    
        
        
        return 0;
    }

    参考原文:http://blog.csdn.net/morewindows/article/details/6684558

    例二:快速排序优化版

    #include <stdio.h>
    //快速排序  
    void quick_sort(int s[], int l, int r)  
    {  
        if (l < r)  
        {  
            //Swap(s[l], s[(l + r) / 2]); //如果选中间的数做为将中间的这个数和第一个数交换 参见注1  
            int i = l, j = r, x = s[l];  
            while (i < j)  
            {  
                while(i < j && s[j] >= x) // 从右向左找第一个小于x的数,反而是j-- 
                    j--;    
                if(i < j)   
                    s[i++] = s[j];  
                  
                while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数,反而是i++
               
                    i++;    
                if(i < j)   
                    s[j--] = s[i];  
            }  
            s[i] = x;  
            quick_sort(s, l, i - 1); // 递归调用   
            quick_sort(s, i + 1, r);  
        }  
    }   
    int main()
    {
        int array[10]={1,2,3,9,8,7,5,6,4,12};
        quick_sort(array,0,9);
        int i;
        for(i=0;i<10;i++)
        {
        printf("%d ",array[i]);        
        }    
        
        
        return 0;
    }
  • 相关阅读:
    PHP木马免杀的一些总结
    regsvr32 bypass windows defender 新思路
    要点4:C的文件操作
    【Go语言探险】线上奇怪日志问题的排查
    Eclipse部署虚拟项目目录
    osgEarth使用笔记4——加载矢量数据
    three.js中的矩阵计算
    GDAL数据集写入空间坐标参考
    matlab 基础
    nginx 配置文件解读
  • 原文地址:https://www.cnblogs.com/bluewelkin/p/4097920.html
Copyright © 2011-2022 走看看