快速排序

#include<stdio.h>
#include<stdlib.h>


/**
* 快速排序
基本思想:通过对数组不断地划分,达到排序地目的
划分:任意选择一个元素,将数组一分为二,左边的都小于它,右边的都大于它
*/


int a[]={4,5,6,8,2,1,54,6,8,4,654,6,231,3,878,54,54,878,65,22,4,13,467,36687,5,5,4,6,3,8,4578,5,1,187,8,64,64,84,54,87,8764,231,48,415648,42,132,14,4,984,1,1,54,6,51,3212,3486498};
//int a[]={4,5,6,8,2,1,54};
void switch_(int i ,int j)
{
int t = a[i];
a[i] = a[j];
a[j] = t;
}
//划分 返回划分元素最后所在的位置
int partition(int m,int p)
{


int v = a[m]; //划分元素
int i = m;    //左边
int j = p;      //右边


while(i < j )
{
while(a[i] <= v && i < j)    //从左边找到一个元素大于划分元素  
{
i++;
}
while(a[j] >= v && j > i)    //从右边找到一个小于划分元素的元素,
{
j--;
}


//交换两个元素的位置
if( i < j)
switch_(i,j);
}
//到此 i=j
a[m] = a[j]; 
a[j] = v;
return j;


}
void printAll()
{
int k = sizeof(a)/sizeof(a[0]);
for(int i = 0 ; i < k ;i++)
{
printf("%d ",a[i]);
}
}


void quickSort(int p,int q)
{
if(p < q)
{
int j = partition(p,q);
//中间那个元素可以不用管了,因为已经固定了,后面的排序不会影响中间的那个元素
quickSort(p,j-1); //继续排序左边  
quickSort(j+1,q);  //继续排序右边
}


}


void main()
{


int k = sizeof(a) / sizeof(a[0]);
quickSort(0,k-1);
printAll();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值