C语言笔记17--快速排序简单实现

快速排序(QuickSort)是一种排序算法,并且非常的实用。快速排序的原理是先找一个基准值,然后和序列的每个值比较,大于基准值的放在基准值右边,小于基准值的放在左边。那么数组将会被分割成两组,左边的是小于基准值的,右边是大于基准值的,那就是说基准值的位置已经确定。然后分别为这两组找基准值进行分割,经过递归后,数组的元素位置都会确定。

#include<stdio.h>
#include<stdlib.h>
#define M 10//作为数组的长度
//打印数组
void printfarray(int *p,int len)
{
    for(int *temp=p;temp<p+len;temp++)
    {
        printf("%3d",*temp);
    }
    printf("\n");
}
//交换两个值
void swap(int *pa,int *pb)
{
   int temp=*pa;
    *pa=*pb;
    *pb=temp; 
}
void quicksort(int *p,int left,int right)
{    
    int i=left;//副本
    int j=right;//副本
    if(i<j)//i要小于j
    {
        while(i<j)
        {
            while(p[left]>p[i])//p[left]作为基准值
            {
                i++;//从左往右,直到找到有大于基准值的退出循环
            }
            while(p[left]<=p[j])
            {
                j--;//从右往左,直到找到有小于基准值
            }
            swap(&p[i],&p[j]);//交换两者
        }
        //当i不小于j时,刚好把数组遍历了一次,找到了第一个基准值的位置
        //p[j]作为新的基准值,此时的p[left]值位置已经确定
        swap(&p[left],&p[j]);
        quicksort(p,left,j-1);//p[j]值已经确定位置
        quicksort(p,j+1,right);
    }
}
void main()
{
    int a[M]={ 35, 23, 45, 66, 78, 30, 14, 8, 54, 15};//随机写的数组
    printfarray(a,M);
    quicksort(a,0,M-1);
    printfarray(a,M);
    system("pause");
}

猜你喜欢

转载自blog.csdn.net/weixin_40850689/article/details/82911461