快速排序—C语言

快速排序—C语言

/*
 *File name:Quicksort
 *Author:Fei Yuling     Version:1.0     Date:2018.9.10 
 *Description:对数组元素进行快速排序
 */     

#include<stdio.h>
#include<stdlib.h>
#define MAX 20

/*
 *函数名:print
 *作用:打印数组 
 *参数:len-数组长度,arr-数组 
 *返回值:无 
 */ 

 void print(int len,int arr[])
 {
    if(len>0)
    {
        int i;
        for(i=0;i<len;i++)
        {
            printf("%d ",arr[i]);
         } 
        printf("\n");
     }
    else if(len=0) printf("数组为空\n");
    else printf("数组错误\n");
 }

 /*
 *函数名:swap
 *作用:交换两个数的值
 *参数:*a,*b-要交换的两个数
 *返回值:无
 */
void swap(int *a, int *b)  
{
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}

 /*
 *函数名:sort
 *作用:快速排序 
 *参数:arr-待排数组,begin-第一个元素,end-最后一个元素 
 *返回值:无
 */ 

void sort(int arr[], int begin, int end)
{
   int i,j;

   if(begin<end)
   {
    i=begin+1;//每次第一个数字为基准,从基准后一个数字作为开头 
    j=end;//最后一个数字为结尾 
    while(i<j)//当i=j时跳出循环 
    {
    if(arr[i]>arr[begin]) //从开头依次与基准比较,比基准大就与j交换 
        {
        swap(&arr[i],&arr[j]); 
        j--;//交换后j前移 
        } 

    else 
        {
        i++;//否则i后移,比较下一个
        }
    }
    /*此时i=j*/ 
    if(arr[i] >= arr[begin]) //当最终停留的数字大于等于基准时,i前移,即此数在枢纽之后 
        {
            i--; 
        }
    swap(&arr[begin], &arr[i]);//将基准放在枢纽位置 

    sort(arr,begin,i);//递归 
    sort(arr,j,end);

   }
}

 int main()
 {
    int n,i;
    int arr[MAX];
    printf("请输入待排序列数字个数(不超过20个):");
    scanf("%d",&n);
    printf("请输入待排序列:");
    for(i=0;i<n;i++)
     {
        scanf("%d",&arr[i]);
     }
    sort(arr,0,n-1); 
    printf("快速排序后的数组为:\n");
    print(n,arr);
    return 0;
}

运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值