快速排序

简介:  #include<stdio.h> #include<stdlib.h>   void change(int *pa, int *pb)//根据地址交换两个变量的值 {     int temp = *pa;     *pa = *pb;     *pb = temp; }  


#include<stdio.h>

#include<stdlib.h>

 

void change(int *pa, int *pb)//根据地址交换两个变量的值

{

    int temp = *pa;

    *pa = *pb;

    *pb = temp;

}

 

void show(int *p, int n)//显示数组状态

{

    printf("\n此时此刻数组的状态");

    for (int i = 0; i < n; i++)

    {

        printf("%5d", p[i]);//*(p+i)

    }

}

 

void  Quicksort(int *p, int left, int right)

{

    printf("\n要处理的子序列    ");

    for (int i = left; i <= right; i++)//从左到右打印要处理子序列

    {

        printf("%5d", p[i]);

    }

 

    int i = left;//a[0] //最左边的数

    int j = right + 1;//a[10] 最右边的数

 

    if (i < j)//循环的可用条件

    {

        do

        {

            do

            {

                i++;

 

            } while (p[i]<p[left] && i <= right);//统计多少个小于它的数,p[i]就是最右边小于第一个数的数

 

            do

            {

                j--;

            } while (p[j] >= p[left] && j>left);//统计下标最左边大于第一个数的数

 

            printf("\na[%d]=%d,a[%d]=%d", i, p[i], j, p[j]);//打印中间数据

            if (i < j)

            {

                change(&p[i], &p[j]);

            }

            show(p, 10);

        } while (i < j);///j作为分割点     小于的数往左,大于的数往右

 

        change(&p[left], &p[j]);//j作为分割点

        printf("\np[%d]=%d", j, p[j]);

 

        show(p, 10);//

 

        Quicksort(p, left, j - 1);//分割左边

        Quicksort(p, j + 1, right);//分割右边

    }

}

 

void main()

{

    int a[10] = { 19, 9, 20, 8, 38, 49, 11, 58, 34, 22 };

    show(a, 10);//显示数组没有排序的状态

    Quicksort(a, 0, 10 - 1);

    show(a, 10);//显示数组没有排序的状态

 

    system("pause");

}

目录
相关文章
|
8月前
快速排序
快速排序
29 0
|
8月前
|
搜索推荐 C++
C++快速排序的实现
C++快速排序的实现
|
8月前
|
算法
快速排序(三)——hoare法
快速排序(三)——hoare法
84 1
|
C++
C++快速排序
C++快速排序
62 1
|
算法 搜索推荐 测试技术
快速排序详解
快速排序详解
131 0
|
人工智能 搜索推荐
【快速排序】
【快速排序】
|
算法 搜索推荐
快速排序到底有多快
快速排序到底有多快
97 0
|
搜索推荐 C++
快速排序(C++实现)
一、快速排序的基本实现 快速排序算法是一种基于交换的高效的排序算法,它采用了分治法的思想: 1、从数列中取出一个数作为基准数(枢轴,pivot)。 2、将数组进行划分(partition),将比基准数大的元素都移至枢轴右边,将小于等于基准数的元素都移至枢轴左边。 3、再对左右的子区间重复第二步的划分操作,直至每个子区间只有一个元素。 快排最重要的一步就是划分了。划分的过程用通俗的语言讲就是“挖坑”和“填坑”。
466 0

热门文章

最新文章