C语言快速排序

1)包含任务或问题描述和分析

快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。

2)设计与实现

1. 在数组中选一个基准数(通常为数组第一个);

2. 将数组中小于基准数的数据移到基准数左边,大于基准数的移到右边;

3. 对于基准数左、右两边的数组,不断重复以上两个过程,直到每个子集只有一个元素,即为全部有序。

3)测试例子与结果分析

 4)带注释的源代码

#include <stdio.h>
#include <stdlib.h>
#define MAX 5 
void Printarray(int array[])
{
    int i;
    for (i=0;i<MAX;i++)
    {
        printf("%d\t",array[i]);
    }
    printf("\n");
}
void QuickSort(int arr[],int low,int high)
{
    if (low<high)
    {
        int i=low;
        int j=high;
        int k=arr[low];
        while (i<j)
        {
            while (i<j&&arr[j]>=k)//从右端开始找出第一个小于k的数 
            {
                j--;
            }
            if (i<j)
            {
                arr[i++]=arr[j];//将该值赋给i并将i加一 
            }
            while (i<j&&arr[i]<k)//从左端开始找出第一个大于k的数 
            {
                i++;
            }
            if (i<j)
            {
                arr[j--]=arr[i];//将该值赋给j并使j减小 
            }
        }
        arr[i]=k;//找到i==j的位置并赋k值 
        printf("经过一次快速排序后的数组为:\n");
		Printarray(arr);
        QuickSort(arr,low,i-1);//递归排序左半部分 
        QuickSort(arr,i+1,high);//递归排序右半部分 
    }
}
int main()
{
    int array[MAX]={0};
    int i;
    for(i=0;i<MAX;i++){
    	scanf("%d",&array[i]);//循环输入数组 
	}
    printf("初始数组为:\n");
    Printarray(array);
    QuickSort(array,0,MAX-1);
    printf("最后得到的数组为:\n");
    Printarray(array);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值