快速排序

今天把快排写了下,先介绍下,快排,常用排序方法,最差情况下n方,最好情况下O(nlgn)。分治思想,利用某个值对数组进行分割,持续分割为多个数组,直到有序。

例如,原始为 1 3 7 5 4 9 6. 以6为中轴数字,分割之后为1 3 5 4 6  9 7。

分割函数维护两个集合,大于中轴数字的和小于中轴数字的。如下图所示:


代码如下:

// quick_sort.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<iostream>
#include<stdio.h>
#define MAXLENTH 10000

void swap(int &x,int &y)
{
	int temp;
	temp = x;
	x = y;
	y = temp;
}
int patition(int array_sort[],int start,int end)
{
	int i=start - 1,temp;
	temp = array_sort[end];
	for(int j = start;j < end;j++)
	{
		if(array_sort[j] < temp)
		{
			i++;
			swap(array_sort[i],array_sort[j]);
		}
	}
	swap(array_sort[i+1],array_sort[end]);
	return i+1;
}
void quick_sort(int array_sort[],int start,int end)
{
	if(start < end)
	{
		int p = patition(array_sort,start,end);
		quick_sort(array_sort,start,p-1);
		quick_sort(array_sort,p+1,end);
	}
}


int _tmain(int argc, _TCHAR* argv[])
{
	int array_sort[MAXLENTH];
	printf("please enter the length of the array\n");
	scanf("%d",&array_sort[0]);
	int i;
	printf("please enter the array\n");
	for(i = 1;i <= array_sort[0];i++)
		scanf("%d",&array_sort[i]);
	quick_sort(array_sort,1,array_sort[0]);
	for(i = 1;i <= array_sort[0];i++)
		printf("%d ",array_sort[i]);
	system("pause");
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值