从右向左冒泡排序

 前面写的冒泡排序是从左边向右找较大值,先找到最大值,然后依次找到次最大值,从右往左排序。这篇文章再次从右边往左找最小值,先将最小值找到,再找次较小值,从左往右排序。

我们先定义三个值int size=sizeof(arr)/sizeof(arr[0]);//数组的大小

int cur;//current 当前值

int bound;//边界(0,size-1]就可以表示整个数组下标的区间,(0,bound]表示已排序的区间,[bound,size)表示待排序区间

定义一个排序的函数,代码如下所示

void asc_sorted(int* arr,int size)
{
	int bound; int cur;//cur:current,bound :边界
	for (bound = 0; bound<size; ++bound)
	{
		for (cur = size - 1; cur>bound;--cur)
		{
			//找较小值
			if (arr[cur - 1] > arr[cur])
			{
				int temp = arr[cur];
				arr[cur] = arr[cur - 1];
				arr[cur - 1] = temp;
			}
		}
	}
}

// 数组作为函数的参数时会隐式转换成指针,指向数组的首元素,所以在定义时要借用指针。
// 在函数外部将数组长度求好然后当做参数传到函数里面。

完整程序如下所示示。代码中只要求对5 个数进行排序,如果需要更多,修改数组大小就行。

#include <stdio.h>
#include <stdlib.h>
void asc_sorted(int* arr,int size)//ascending升序,desending降序
{
	int bound; int cur;//cur:current,bound :边界
	for (bound = 0; bound<size; ++bound)
	{
		for (cur = size - 1; cur>bound;--cur)
		{
			//找较小值
			if (arr[cur - 1] > arr[cur])
			{
				int temp = arr[cur];
				arr[cur] = arr[cur - 1];
				arr[cur - 1] = temp;
			}
		}
	}
}

int main()
{
	// 数组作为函数的参数时会隐式转换成指针,指向数组的首元素
	// 在函数外部将数组长度求好然后当做参数传到函数里面
	int arr[5];
	int size = sizeof(arr) / sizeof(arr[0]);
	printf("please enter the array:\n");
	for (int i = 0; i < 5; i++)
		scanf_s("%d", &arr[i]);
	asc_sorted(&arr,size);
	for (int i = 0; i < 5; i++)
		printf ("%d\t", arr[i]);
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41158320/article/details/83990294