冒泡排序分为两步
第一步是进行趟的遍历
第二步就是趟内的比较优化呢,怎么说呢,没优化的代码如果给定一个有序列的数组,
还是会进行遍历,浪费了时间,优化后的代码 如果判断有序,
则就不会继续循环话不多说,上代码!
#include<stdio.h>
#include<stdlib.h>
void Swap(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
void PrintArr(int *arr, int left,int right)
{
for (int i = left; i < right; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
//冒泡排序
void BubbleSort(int *arr, int left, int right)
{
int i = 0;
int j = 0;
for (i = left; i < right - 1; i++)
{
for (j = left; j < right-i; j++)
{
if (arr[j]>arr[j + 1])
{
Swap(&arr[j], &arr[j + 1]);
}
}
}
}
//冒泡排序优化
void BubbleSort(int *arr, int left, int right)
{
int i = 0;// 1 3 2 4 5 6 7 8
int j = 0; // 1 2 3 4 5 6 7 8
bool is_swap = false;
for (i = left; i < right - 1; i++)
{
for (j = left; j < right - i; j++)
{
if (arr[j]>arr[j + 1])
{
Swap(&arr[j], &arr[j + 1]);
is_swap = true;
}
}
if (!is_swap)
break;
else
is_swap = false;
}
}
int main()
{
int arr[8] = { 1, 2, 8, 4, 5, 6, 7, 3 };
int temp[8];
int n = sizeof(arr) / sizeof(arr[0]);
int left = 0;
int right = n - 1;
PrintArr(arr, left,right);
PrintArr(arr, left,right);
system("pause");
return 0;
}
本文详细介绍了冒泡排序算法的基本原理和实现步骤,并提出了一种优化方案,通过判断数组是否已有序来提前结束排序过程,避免不必要的遍历,从而提高排序效率。
442

被折叠的 条评论
为什么被折叠?



