王道数据结构课后代码题p335 02.编写双向冒泡排序算法,在正反两个方向交替进行扫描,第一趟把关键字最大的元素放在序列的最后面,第二趟把关键字最小的元素放在序列的最前面(c语言代码实现)

这种排序方法又称双向起泡。奇数趟时,从前向后比较相邻元素的关键字,遇到逆序即交换,直到把序列中关键字最大的元素移动到序列尾部。偶数趟时,从后往前比较相邻元素的关键字,遇到逆序即交换,直到把序列中关键字最小的元素移动到序列前端。

先从前面进行冒泡排序,把数值大的往后移

再从后面进行冒泡排序,把数值小的元素往前移

王道数据结构课后代码题p335 02.编写双向冒泡排序算法,在正反两个方向交替进行扫描,第一趟把关键字最大的元素放在序列的最后面,第二趟把关键字最小的元素放在序列的最前面(c语言代码实现)_第1张图片

重复进行

王道数据结构课后代码题p335 02.编写双向冒泡排序算法,在正反两个方向交替进行扫描,第一趟把关键字最大的元素放在序列的最后面,第二趟把关键字最小的元素放在序列的最前面(c语言代码实现)_第2张图片

这个时候已经排完序了最后出循环是这样的

王道数据结构课后代码题p335 02.编写双向冒泡排序算法,在正反两个方向交替进行扫描,第一趟把关键字最大的元素放在序列的最后面,第二趟把关键字最小的元素放在序列的最前面(c语言代码实现)_第3张图片

本题代码如下

void twobubble(int a[], int sz)
{
	int i = 0;
	int low = 0;
	int high = sz - 1;
	int temp = 0;
	while (low < high)
	{
		for (i = low; i < high; i++)//从前面进行冒泡排序
		{
			if (a[i] > a[i+1])//把数值大的往后移
			{
				temp = a[i];
				a[i] = a[i+1];
				a[i+1] = temp;
			}
		}
		high--;
		for (i = high; i> low; i--)//从后面进行冒泡排序
		{
			if (a[i]

完整测试代码

#include
void twobubble(int a[], int sz)
{
	int i = 0;
	int low = 0;
	int high = sz - 1;
	int temp = 0;
	while (low < high)
	{
		for (i = low; i < high; i++)//从前面进行冒泡排序
		{
			if (a[i] > a[i+1])//把数值大的往后移
			{
				temp = a[i];
				a[i] = a[i+1];
				a[i+1] = temp;
			}
		}
		high--;
		for (i = high; i> low; i--)//从后面进行冒泡排序
		{
			if (a[i]

你可能感兴趣的:(排序,算法,数据结构,c语言,排序算法)