//冒泡排序
#include <stdio.h>
#include <stdlib.h>
//采用两层循环实现
//参数arr是待排数组的首地址,n是元素的个数
void bubbleSort(int arr[], unsigned int n)
{
if (n < 2)
{
return; //数组小于2个元素不用排序
}
for (int i = 0; i < n; i++) //i用来控制每趟的冒泡
{
for (int j = 0; j < n - 1 - i; j++) //每趟只需要比1...i之前的元素,i之后的元素已经排序好了
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp; //如果前面元素大于后面则交换
}
}
}
}
//采用递归实现冒泡排序法
void bubbleSortDG(int arr[], unsigned int n)
{
if (n < 2) //这是递归的出口
{
return; //数组小于2个元素不用排序
}
else
{
for (int j = 0; j < n - 1; j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp; //如果前面元素大于后面则交换
}
}
}
bubbleSortDG(arr, n - 1); //减小问题的规模 这句可放入else中,没有区别
}
int main()
{
int arr[5] = {4, 3, 2, 5, 8};
int n = 5;
//bubbleSort(arr, 5);
bubbleSortDG(arr, 5);
for (int i = 0; i < n; ++i)
{
printf("%d,", arr[i]);
}
return 0;
}