Data Structure--排序--冒泡排序--快速排序(hoare)


接上一篇博客.

冒泡排序

在这里插入图片描述
上图已经详细的讲解了过程,大家仔细看就好,下来我直接讲代码.

void bubbleSort(int* arr,int n){
	
	//相邻元素进行比较
	//遍历范围:0-为排序的最后一位
	int end = n;
	while (end > 1){
		
		//第一次冒泡排序
		for (int i = 1; i < end; ++i){
			
			if (arr[i - 1]>arr[i]){		//这里的i和i-1就相当于i和j
				
				//大的元素向后移动
				Swap(arr, i - 1, i);		//简单交换函数,不描写接口
			}
		}
		--end;		//主要进行循环
	}
}

很简单,重点理解下面这个排序方式.

快速排序(hoare)

在这里插入图片描述
上图看起来可能比较难理解,大家耐心起来看,很简单的,一起加油!!!

//获取基准值
//下面输出的都会基准值
//这段代码主要是理解,其结构不难,不进行过多的注释
int getMid(int* arr, int begin, int end){

	int mid = begin + (end - begin) / 2;	

	if (arr[begin] > arr[mid]){			//==========1.开始大于中间

		if (arr[mid] > arr[end])	
			return mid;
		else if (arr[begin] > arr[end])	
			return end;
		else
			return begin;		
	}
	else{								//=========2.开始小于等于中间

		if (arr[mid] < arr[end])		
			return mid;
		else if (arr[begin] < arr[end])
			return end;
		else
			return begin;
	}
}

//划分函数    实现数组的划分,进行分别遍历的操作
int partion(int* arr, int begin, int end){

	//获取基准值位置
	int mid = getMid(arr, begin, end);
	//把基准值放到起始位置
	Swap(arr, begin, end);

	//首先选择基准值
	int key = arr[begin];
	int start = begin;

	while (begin < end){		//后置比较大的时候

		//1.==============================从后向前找小于基准值的位置
		while (begin < end&&arr[end] >= key)
			--end;

		//2.===============================从前向后找大于的位置
		while (begin < end&&arr[begin] <= key)
			++begin;
		//3.===============================用函数交换
		Swap(arr, begin, end);
	}
	//交换基准值与相遇位置的数据
	Swap(arr, start, begin);
	return begin;
}

//快速排序
void quickSort(int* arr, int begin, int end){
	
	if (begin >= end)
		return;
		
	//div:一次划分后基准值
	int div = partion(arr, begin, end);
	//分别进行左右两边的快排
	//[begin,div-1]
	//[div+1,end]
	quickSort(arr, begin, div - 1);
	quickSort(arr, div + 1, end);
}

注意这里的div的理解:
在这里插入图片描述
这两种排序我就讲解到这里,相信大家如果完全看懂的话就没有问题了!!最最最主要的还是要多敲代码!!!一起加油啊!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值