冒泡排序法(升序)
#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 - 1 - i;j++)
if ( arr[j] > arr[j + 1])
{
int tmp = 0;
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
void main()
{
int arr[] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0;
bubble_sort(arr,sz);//调用函数,并将sz的值传入函数,便于计算
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
}
代码还可以做些改进,提高运行效率,如果在某一趟排序中,已将最终的顺序排好,则后面的步骤则可以没必要进行。
例如:
#include<stdio.h>
void bubble_sort(int arr [], int sz)
{
//确定冒泡排序的趟数
int i = 0;
for (i = 0; i <sz - 1; i++)
{
int flag = 1;//假设这一趟要排的数据已经有序
int j = 0;
for (j = 0; j < sz - 1 - i;j++)
if ( arr[j] > arr[j + 1])
{
int tmp = 0;
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
flag = 0;//本趟排序并不完全有序
}
if (flag == 1)
break;//如果排序确实已经完成,则跳出循环,完成排序
}
}
void main()
{
int arr[] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0;
bubble_sort(arr,sz);//调用函数,并将sz的值传入函数,便于计算
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
}