快速排序C语言代码实现

main.cpp

#include"stdio.h"
#include"stdlib.h"
#include"QuickSort.h"

void main()
{
	int A[10] = {0,5,6,7,8,3,2,9,4,3};
	QuickSort( A,  10);
	PrintfSort( A, 10);
}

QuickSort.h

#ifndef QUICK
#include<stdio.h>

void QuickSort(int* A, int N);
void PrintfSort(int* A,int N);

#endif // !QUICK
#pragma once

QuickSort.cpp

#include"QuickSort.h"


void Swap(int* a,int* b)
{
    int temp ;
    temp = *a;
    *a = *b;
    *b = temp;
}


int Median3(int* A, int left, int right)
{
    int center = (left + right) / 2;

    if (A[left] > A[center])
    {
        Swap(&A[left],&A[center]);
    }

    if (A[left] > A[right])
    {
        Swap(&A[left], &A[right]);
    }

    if (A[center] > A[right])
    {
        Swap(&A[center], &A[right]);
    }

    Swap(&A[center], &A[right - 1]);//将基准Pivot藏到右边

    return  A[right - 1];  
}


void Qsort(int* A,int left, int right)
{
    if (left >= right)
    {
        return;
    }
       int Pivot, low, high; 

        //元素多就使用快速排序
       
        Pivot = Median3(A,left,right);//选基准
        low = left;
        high = right - 1; //high初始位置为基准位置

        if (low >= high)
        {
            return;
        }

        while (1) 
        {
            while (A[++low] < Pivot) //从low + 1开始 (从1开始)
            {
                //当A[low] >= Pivot 时自动退出
            }

            while (A[--high] > Pivot) // 从right - 2 开始
            {
                //当A[high] <= Pivot 时自动退出
            }

            if (low < high)//前后交换
            {
                Swap(&A[low],&A[high]);
            }
            else
            {
                break;
            }
        }
        if (right - 1)
        {

        }
        Swap(&A[low],&A[right - 1]);
        Qsort(A, left, low - 1);//比基准小的序列递归
        Qsort(A, low + 1, right);//比基准大的序列递归
}


//API函数

void QuickSort(int* A, int N)
{
    Qsort(A, 0, N - 1);
}

void PrintfSort(int* A, int N)
{
    for (int i = 0; i < N; i++)
    {
        printf("%d\n",A[i]);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鄢广杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值