直接看代码吧
#include <stdio.h>
void BubbleSort(int* R, int len)
{
bool exchange; // 交换标志
int temp;
for (int i = 0; i < len; i++) // 最多做n-1次排序
{
exchange = false;
for (int j = len - 2; j >= i; j--)
if (R[j + 1] < R[j])
{
temp = R[j + 1];
R[j + 1] = R[j];
R[j] = temp;
exchange = true;
}
if (!exchange) // 如果没有发生交换,提前终止算法
return;
}
}
int main()
{
int aa[10];
printf("\nPlease input 10 num:\n");
for (int i = 0; i < 10; i++)
{
scanf("%d", &aa[i]);
}
BubbleSort(aa, 10);
for (int i = 0; i < 10; i++)
printf("%d ", aa[i]);
printf("\n");
return 0;
}
加入exchange的作用:
在每趟排序开始前,先将其置为false。
若排序过程中发生了交换,则将其置为true。
每趟排序结束时检查exchange,若未发生过交换则终止算法,不再进行下一趟排序
整理自《程序员面试宝典》