前面写的冒泡排序是从左边向右找较大值,先找到最大值,然后依次找到次最大值,从右往左排序。这篇文章再次从右边往左找最小值,先将最小值找到,再找次较小值,从左往右排序。
我们先定义三个值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