快速排序(C语言实现)

快速排序算法(Quick Sort)

快速排序算法是在起泡排序的基础上进行改进的一种算法,其实现的基本思想是:通过一次排序将整个无序表分成相互独立的两部分,其中一部分中的数据都比另一部分中包含的数据的值小,然后继续沿用此方法分别对两部分进行同样的操作,直到每一个小部分不可再分,所得到的整个序列就成为了有序序列。
C语言中自带函数库中就有快速排序——qsort函数 ,包含在 <stdlib.h> 头文件中。
下面用C语言实现一下快速排序。

int _quick_sort1(int* arr, int left, int right) //子函数2
{
 	int pivot = arr[left]; // 以子表的起点作为标杆
 	while(left < right) // 当左右指针相遇时,循环结束
 	{
  		while(left < right && arr[right] >= pivot) right--; // 右指针左移,直到遇到比标杆小的值停下
  		arr[left] = arr[right]; // 将右指针指向的值赋值给左指针指向的值,这样这个比标杆小的值最后就会在标杆的左边
  		while(left < right && arr[left] <= pivot) left++;// 左指针左移,直到遇到比标杆大的值停下
  		arr[right] = arr[left];// 将左指针指向的值赋值给右指针指向的值,这样这个比标杆大的值最后就会在标杆的右边
 	}
 	arr[left] = pivot; // 到这一步时,左右指针已经相遇,然后将标杆的值赋值给它们相遇的位置即可,这样一来,标杆的左边就都是小于标杆的值,右边都是大于标杆的值
 	return left; // 返回标杆的下标,对标杆左子表和右子表进行递归即可
}

void _quick_sort(int* arr, int left, int right) //子函数1
{
 	if(left >= right) return;
 	int pivotloc = _quick_sort1(arr, left, right); // pivotloc用于记录每次左右子表的分界点
 	_quick_sort(arr, left, pivotloc-1); // 对左子表进行递归
 	_quick_sort(arr, pivotloc+1, right); // 对右子表进行递归
}

void quick_sort(int* arr, int len)
{
 	_quick_sort(arr, 0, len-1);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值