• C 实现快速排序


    一、快速排序

    快速排序可以理解为是对冒泡排序的一种改进,把一组数,按照初始选定的标杆(参照数),分别从两端开始排序,左端'i'只要小于标杆(参照数)的数,右端'j'只要大于标杆(参照数)的数,
    i----->middle<-----j每一次排序循环条件为 i != j 左端I不等于j,每次排序,j先排,从右往左找,知道找到第一个比标杆(参照数)小的数就停下来,而i从左往右,除了找到比自己大的数停下来之外,还要满足i<j的条件。当i和j都停下来时,我们就交换索引i处的值和索引j处的值,如果 i != j 就继续从当前j往左边排序找到比标杆(参照值)小的数,i继续从当前位置向右找比自己大的数,这样循环直到 i == j 意味着,当前i、j索引的值,除了参照值左边都比标杆(参照数)小,右边都比参照数大,然后第一次排序把标杆和i处的值交换,就算完成了,然后把该数组分成了两段,分别再递归调用自身继续排序,直到每轮剩下两个数或者j先找,走到了i的位置,所以递归调用停止的条件就应该是 i>j-1。
    

    二、C语言实现

    include<stdio.h>
    
    int arr_num[];
    int length;
    
    void quick_sort(int left, int right)
    {
        int i, j, c, temp;
        if(left>right)
            return;
        
        i= left;
        j= right;
        temp = arr_num[i]    
    
        while(i != j)
        {
            while(arr_num[j]>=temp && i<j)
            {
                j--;
            }
            
            while(arr_num[i]<=temp && i<j)
            {
                i++;
            }
    
            if(i<j)
            {
                c = arr_num[i];
                arr_num[i] = arr_num[j];
                arr_num[j] = c;
            }
        }
        
        //left为起始值(参照值)此时的I为第一次排序结束的最后值,与参照值交换位置
        arr_num[left] = arr_num[i];
        arr_num[i] = temp;
    
        //继续递归直到排序完成
        quick_sort(left, i-1);
        quick_sort(i+1, right);
    }
    
    int main() 
    { 
        int i;
        length = 7;
        arr_num[length] = {23, 7, 17, 36, 3, 61, 49}
     
        //快速排序调用
        quick_sort(0, length-1);  
                                 
        //输出排序后的结果 
        for(i=1;i<=length;i++) 
            printf("%d ",arr_num[i]); 
        getchar();getchar(); 
        return 0; 
    } 
    
  • 相关阅读:
    软件工程基础
    第一个微信小项目
    数据库实践
    爬虫
    模拟体育竞技
    自己的第一个网页
    科学计算和可视化
    结队项目
    自动生成小学四则运算
    自动生成小学四则运算
  • 原文地址:https://www.cnblogs.com/shiqi17/p/9398893.html
Copyright © 2020-2023  润新知