快速排序

快速排序

以前就曾经接触过快排,这一次好好整理了一下思路,重写了一遍,记录一下。

/*
快速排序使用了分治的思想,所以搞明白一趟排序,剩下的以此类推很好理解。
首先设置一个参考数,一般都是第一个数,接下来从右到左扫描找一个比参考数大的数,再从左到右找一个比参考数小的数,他俩交换,直到参考数左面的数都比他小右面的数都比参考数大,第一趟排序就大功告成了。
下面是第一趟排序的例子:
5 4 7 2 4 8 9 1 0 3
5 4 3 2 4 8 9 1 0 7
5 4 3 2 4 0 9 1 8 7
5 4 3 2 4 0 1 9 8 7
1 4 3 2 4 0 5 9 8 7
*/
#include <stdio.h>
void quick_sort(int arr[],int start,int end)
{
    int i,j,t,temp;
    if(start >= end){
        return;//程序的出口
    }
    temp = arr[start];
    i = start;
    j = end;
    while(i != j)
        {
            while(arr[j] >= temp && i < j)
                j--;
            while(arr[i] <= temp && i < j)
                i++;
            if(i < j) 
                {
                    t = arr[i];
                    arr[i] = arr[j]; //找到的两个数交换
                    arr[j] = t;
                }   
        }
    arr[start] = arr[i];
    arr[i] = temp;
    quick_sort(arr,start,i-1);
    quick_sort(arr,i+1,end);

}

int main(void)
{
int arr[] = {5,4,7,2,4,8,9,1,0,3};
quick_sort(arr,0,9);
int i;
for(i = 0 ; i < 10 ; i++)
    {
        printf("%d",arr[i]);
    }
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值