常用排序代码解析--快速排序

快速排序

快速排序是一种高效且使用广泛的排序算法,使用分治法策略来把一个串行分为两个串行

算法步骤:

  1. 从数列中挑出一个元素,称为“基准”
  2. 重新排序数列,所有元素比基准小的摆放在基准前面,所有元素比基准值大的摆放在基准的后面(相同的数可以放一边)。这个分区退出之后,改基准就处于序列的中间位置
  3. 递归地把小于基准元素的子数列和大于基准元素的子序列排序

代码实现:

C++代码实现:
split算法实现:使用单向指针对数组进行遍历,首先将数组首元素设置为基准元素,然后再将第二个开始的元素依次与基准元素比较
void swap(int &a, int &b){
	int t = a;
	a = b;
	b = t;
}

int split(int arryNum[], int low, int high){
	int baseIndex = low; //基准值索引
	int baseNum = arryNum[baseIndex];  //基准值
    
	for(int j = low + 1; j <= high; j++){
		if(arryNum[j] <= baseNum){
			baseIndex++;
			//std::cout << "baseIndex:  " << baseIndex << "  baseIndexNum:  " <<                             		arryNum[baseIndex]<< std::endl;
			//std::cout << "j:  " << j << "  jNum:  " << arryNum[j]<< std::endl;
			swap(arryNum[baseIndex], arryNum[j]);
          
		}
	}
	swap(arryNum[low], arryNum[baseIndex]);
	return baseIndex;
}

void quick_sort(int a[], int low, int high){
	if(low < high){
		int index = split(a, low, high);
		quick_sort(a, low, index - 1);
		quick_sort(a, index + 1, high);
	}
}

partiton算法实现:partiton算法使用头尾两个方向相反的指针进行遍历,先将数组的第一个元素设置为比较元素,头指针从左到右找到第一个比基准元素大的数,尾指针从右至左找到第一个小于基准元素的数,全部交还完毕后将基准元素放到中间位置。
int partiton(int arryNum[], int low, int high){
	int baseNum = arryNum[low];
	int left = low;
	int right = high;
    
	while(left < right){
		while(left < right &&  arryNum[right] >= baseNum)
			right--;
		while(left < right && arryNum[left] <= baseNum)
			left++;
		if(left != right)
			swap(arryNum[left], arryNum[right]);
	}
	swap(arryNum[low], arryNum[left]);
	return left;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值