排序【4】快速排序

快速排序和冒泡排序一样属于交换排序,它是一种非常高效的排序。它采用了一种分治的策略,把大的拆分成

小的,再把小的拆分为更小的。

快速排序是一种不稳定的排序

时间复杂度:最好情况:O(nlogn)  最坏情况:O(n2)  平均情况:O(nlogn)

空间复杂度:O(logn)

那么快速排序主要是什么思想呢?

对于一组无序数据,先任选一个记录作为基准,一般选第一个为基准,然后将数据与这个基准进行比较,分为左右区间

小于它的放在前面,大于它的放在后面,然后通过递归调用对左右区间进行快速排序,直到所有数据有序为止


代码如下:

#include <stdio.h>

void Sort(int par_array[], int low, int high)
{
	int i,j;
	int index;

	if (low >= high)
	{
		return ;
	}

	i = low;
	j = high;
	index = par_array[i];          //基准

	while(i < j)
	{
		while(i < j && par_array[j] >= index)             //大于基准的放在右边,小于的放在左边
			j--;
		if (i < j)
			par_array[i++] = par_array[j];            

		while(i < j && par_array[i] <= index)
			i++;
		if (i < j)
			par_array[j--] = par_array[i];
	}

	par_array[i] = index;

	Sort(par_array, low, i-1);                            //递归左右区间,直到有序
	Sort(par_array, i+1, high);
}


void QuickSort(int array[], int length)
{
	Sort(array, 0, length-1);
}

int main1()
{
	int i;
	int a[] = {0, 6, 1, 3, 2, 5, 8, 9, 7, 6};
	int len = sizeof(a) / sizeof(a[0]);

	QuickSort(a, len);

	for (i = 0; i < len; i++)
	{
		printf("%d ", a[i]);
	}

	printf("\n");

	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值