冒泡排序是一种 较简单的 排序算法 。 它重复地走访过要排序的元素列,依次比较两个相邻的 元素 ,如果顺序错误就把他们交换过来。
为了让大家对冒泡排序有一个深入的了解,我们在这里以使用十个整数,进行冒泡排序为例。
首先,我们把主函数写好。
#include
int main()
{
//定义一个数组用来存放十个整数
int arr[10] = { 1,2,6,4,7,8,5,9,11,-1 };
//计算出这个数组的元素个数
int sz = sizeof(arr) / sizeof(arr[0]);
调用bubble_sort函数,进行冒泡排序
bubble_sort(arr, sz);
//将排序后的数组打印
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
这里我们要注意,bubble_sort(arr, sz)中,传参时,我们写的是arr,表示将arr数组的首元素的地址传过去,而不是arr数组的内容。
数组名一般都是表示数组首元素的地址,但是,有两种情况除外。
1.sizeof(数组名) 这里表示整个数组。
2.&数组名 , 这里也是表示整个数组。
接下来我们开始写bubble_sort函数。bubble_sort函数接收数组首元素的地址,以及数组长度两个参数。因为我们对一系列的元素进行冒泡排序,我们肯定需要先找到这些元素在哪里,其次我们需要知道进行冒泡排序的范围,所以数组长度这个参数也是必要的。
//冒泡排序法
void bubble_sort(int arr[],int sz)
{
int i = 0;
//for循环中的内容是一趟冒泡排序,一共要进行sz-1趟
for (i = 0; i < sz - 1; i++)
{
int j = 0;
int temp = 0;
for (j = 0; j < sz - 1 - i; j++)
//j < sz -1 -i,这里 - i 的原因是,我们已经排序好的元素不需要再参与到冒泡排序中
{
//进行一次比较排序,将相邻的两个数进行比较
//在第一次这里的for循环结束后,数组的最后一个元素就是数组中最大的数
if (arr[j] > arr[j + 1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
#include
//冒泡排序法
void bubble_sort(int arr[],int sz)
{
int i = 0;
for (i = 0; i < sz - 1; i++)
{
int j = 0;
int temp = 0;
for (j = 0; j < sz - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main()
{
int arr[10] = { 1,2,6,4,7,8,5,9,11,-1 };
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;
}
补充:在库函数中,有qsort函数,可以直接用它来实现排序。如下:
void qsort(int* base, size_t num, size_t size, int (*compar) (const void*, const void*));