zoukankan      html  css  js  c++  java
  • 快速排序法

    #include <stdio.h>
    #include <stdlib.h>
    
    void swap(int *pi, int *pj)//交换数据
    {
        int temp = *pi;
        *pi = *pj;
        *pj = temp;
    }
    
    void show(int *p,int n)//显示数组状态
    {
        printf("
    此时状态");
        for (int i = 0; i < n; i++)
        {
            printf("%4d", p[i]);
        }
    }
    
    void quick(int *arr, int iLeft, int iRight)
    {
        int i = iLeft;//从左边开始循环
        int j = iRight + 1;//从右边开始循环
    
        if (i < j)//如果左边小于右边
        {
            do
            {
                do
                {
                    i++;
    
                } while (arr[i] <= arr[iLeft] && i < iRight);
                //从左向右找第一个大于arr[iLeft]的数
                
                do
                {
                    j--;
                } while (arr[j] >= arr[iLeft] && j>iLeft);
                //从右向左找第一个小于arr[iLeft]的数
    
                //如果大数的位置小于小数的位置则进行交换
                if (i < j)
                {
                    swap(&arr[i], &arr[j]);
                }
                //这一步的目的是把大的数都放在右边
            } while (i < j);//一直循环到i>=j 说明已经已经折中分好了 此时j保存的是小于arr[iLeft]的数所以要和arr[iLeft]交换
            swap(&arr[iLeft], &arr[j]);
    
            //j是分界点,快速排序 左边的 以及右边的
            quick(arr, iLeft, j - 1);
            quick(arr, j + 1, iRight);
        }
    }
    
    void main()
    {
        int num[10] = { 10, 9, 20, 19, 1, 8, 9, 22, 0, 91 };
        quick(num, 0, 9);
        show(num, 10);
    
        system("pause");
    }
  • 相关阅读:
    记一次省赛总结
    护网杯一道密码学的感想
    配置phpstudy+phpstorm+xdebug环境
    python 模板注入
    hash扩展攻击本地实验
    kali rolling更新源之gpg和dirmngr问题
    web信息泄露注意事项
    ctf常见php弱类型分析
    文件上传小结
    ctf变量覆盖漏洞
  • 原文地址:https://www.cnblogs.com/xiaochi/p/5178627.html
Copyright © 2011-2022 走看看