快速排序法

#include <stdio.h>
#include <stdlib.h>

void swapint *pi, int *pj)//交换数据
{
    int temp = *pi;
    *pi = *pj;
    *pj = temp;
}

void showint *p,int n)//显示数组状态
{
    printf"
此时状态");
    for int i = 0; i < n; i++)
    {
        printf"%4d", p[i]);
    }
}

void quickint *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是分界点,快速排序 左边的 以及右边的
        quickarr, iLeft, j - 1);
        quickarr, j + 1, iRight);
    }
}

void main)
{
    int num[10] = { 10, 9, 20, 19, 1, 8, 9, 22, 0, 91 };
    quicknum, 0, 9);
    shownum, 10);

    system"pause");
}

Published by

风君子

独自遨游何稽首 揭天掀地慰生平