下面说两种方法,一种是数组下标法,一种是指针法。
数组下标法:
#include<stdio.h>
#include<stdlib.h>
void bubble_sort(int arr[], int sz)
{
int i = 0;
int j = 0;
for (i = 0; i < sz - 1; i++)
{
for (j = 0; j < sz - 1 - i; j++)
{
if (arr[j]>arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
void printf_arr(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
}
int main()
{
int arr[10] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
int sz = sizeof(arr) / sizeof(arr[0]);//计算数组元素的个数
bubble_sort(arr, sz);//注意这里传递的数组名实际上是传递了数组首元素的地址,在函数里面仍然按指针进行计算
printf_arr(arr, sz);
system("pause");
return 0;
}
指针法:
#include<stdio.h>
#include<stdlib.h>
/*基本思想:定义三个指针,一个指向数组的第一个元素start,一个指向数组的最后一个元素end,一个指向数组要比较
的元素cur。start和end控制要走的趟数,当start<end时,进行循环,循环一次,end-1。cur和end控制一
趟比较的次数,当cur<end时,进行循环,循环一次,将cur+1。小循环里面是核心代码,即当cur指向元素
小于cur+1指向元素时,将这两个元素进行交换。*/
//冒泡排序函数
void bubble_sort(int arr[], int sz)
{
int *start = arr;//定义开始指针
int *end = arr + sz - 1;//定义结尾指针
int *cur = arr;
for (start = arr; start < end; end--)//控制趟数
{
for (cur = arr; cur < end; cur++)//控制一趟走的次数
{
if (*cur < *(cur + 1))
{
int tmp = *cur;
*cur = *(cur + 1);
*(cur + 1) = tmp;
}
}
}
}
//打印输出函数
void print(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int main()
{
int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int sz = sizeof(arr)/sizeof(arr[0]);
print(arr, sz);
bubble_sort(arr, sz);
print(arr, sz);
system("pause");
return 0;
}