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