#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
void print(ElemType arr[], int length)
{
for (int i = 0; i < length; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
// 冒泡排序 -- 从前往后冒泡
void BubbleSort0(ElemType arr[], int length)
{
for (int i = 0; i < length - 1; i++)
{
ElemType temp;
for (int j = 0; j < length - i - 1; j++)
{
if (arr[j] < arr[j + 1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
// 冒泡排序改进
void BubbleSort1(ElemType arr[], int length)
{
for (int i = 0; i < length - 1; i++)
{
ElemType temp;
int flag = 1;
for (int j = 0; j < length - i - 1; j++)
{
if (arr[j] > arr[j + 1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = -1;
}
}
if (flag == 1)
break;
}
}
// 冒泡排序 -- 从后往前冒泡
void BubbleSort2(ElemType arr[], int length)
{
// 从前往后冒泡
for (int i = 0; i < length - 1; i++)
{
ElemType temp;
for (int j = length - 1; j > i; j--)
{
if (arr[j] < arr[j - 1])
{
temp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = temp;
}
}
}
}
// 冒泡排序 -- 由冒泡排序的特点可知,每趟都会有一个元素被最终确定下来,如此我们可以求前几个最大值会最小值
void BubbleSort3(ElemType arr[], int length, int n)
{
// 从前往后冒泡
for (int i = 0; i < n; i++) // 只进行n趟冒泡
{
ElemType temp;
for (int j = length - 1; j > i; j--)
{
if (arr[j] < arr[j - 1])
{
temp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = temp;
}
}
}
for (int i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int main()
{
int arr[10] = {9, 4, 0, 7, 5, 4, 1, 8, 2, 3};
int n = sizeof(arr) / sizeof(arr[0]);
// BubbleSort0(arr, n);
// BubbleSort1(arr, n);
// BubbleSort2(arr, n);
BubbleSort3(arr, n, 4); // 排序得到前4个有序数
print(arr, n);
return 0;
}