冒泡排序
什么是冒泡排序及其原理
冒泡排序就是将一组元素经过一系列相邻元素的比较,最后形成一个从小到大的排序。
其原理就是将相邻两个元素进行比较,并将较大的元素放在后面,依次将所有元素比较完毕后,去掉最后一个元素再进行上述操作,直到最后一个元素排序完毕。
代码演示)
#include <stdio.h>
void bubble_sort(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz - 1; i++)
{
int j = 0;
for (j = 0; j<sz-i-1;j++ )
{
if (arr[j] > arr[j + 1])//进行相邻元素的比较及交换
{
int tmp = 0;
tmp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = tmp;
}
}
}
}
int main()
{
int arr[] = { 3,1,7,4,2,6,8,9,0,5 };
int sz = sizeof(arr) / sizeof(arr[0]);//求出数组元素个数
bubble_sort(arr, sz);
int i = 0;
//打印数组
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
具体解读
for (i = 0; i < sz - 1; i++)
{
int j = 0;
for (j = 0; j<sz-i-1;j++ )
{
if (arr[j] > arr[j + 1])//进行相邻元素的比较及交换
{
int tmp = 0;
tmp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = tmp;
对于这串代码
i = 0时, 即arr[0]~arr[9],使得这其中最大的元素被排到arr[9]的位置上;
i = 1时, 即arr[0]~arr[8],使得这其中最大的元素被排到arr[8]的位置上;
i = 2时, 即arr[0]~arr[7],使得这其中最大的元素被排到arr[7]的位置上;
…
i = 8时, 即arr[0]~arr[1],使得这其中最大的元素被排到arr[1]的位置上;
最后arr[0]<arr[1]<…<arr[8]<arr[9],排序成功
优化
#include <stdio.h>
void bubble_sort(int arr[], int sz)
{
int i = 0;
int flag = 1;//假如初始时便是正序
for (i = 0; i < sz - 1; i++)
{
int j = 0;
for (j = 0; j<sz-i-1;j++ )
{
if (arr[j] > arr[j + 1])
{
flag = 0;//需要交换,就不是正序
int tmp = 0;
tmp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = tmp;
}
if (flag == 1)
{
break;//flag为1,即剩下的本就是正序,不需要再交换
}
}
}
}
int main()
{
int arr[] = { 3,1,7,4,2,6,8,9,0,5 };
int sz = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr, sz);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
2369

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



