1、数组形式。
解题思路: 判断比较的躺数,每趟相邻的两个数再进行比较,应用两次 for 循环
具体代码:
void PrintArr(int* arr, int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", *(arr + i));
}
return 0;
}
void BubbleSort(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++)//用for循环的元素个数控住多少趟
{
if (arr[j] > arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j + 1] = tmp;
}
}
}
}
int main()
{
int arr[10] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
int sz = sizeof(arr) / sizeof(arr[0]);
BubbleSort(arr, sz);
PrintArr(arr, sz);
system("pause");
return 0;
}
2、指针形式。
创建两个变量start、end,记住数组起始与结束位置元素的地址,应用两次 while 循环交换地址
指针冒泡排序 :
void PrintArr(int* arr, int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", *(arr + i));
}
return 0;
}
void BubbleSort(int *arr, int sz)
{
int start = arr;
int end = arr + sz - 1;
//趟数
while (start < end)
{
int *cur = start;
while (cur < end)
{
if (*cur > *(cur+1))
{
int tmp = *cur;
*cur = *(cur + 1);
*(cur + 1) = tmp;
}
cur++;
}
end--;
}
}
int main()
{
int arr[10] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
int sz = sizeof(arr) / sizeof(arr[0]);
BubbleSort(arr, sz);
PrintArr(arr, sz);
system("pause");
return 0;
}
算法原理
冒泡排序算法的原理如下:
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
冒泡排序:
#include<stdio.h>
int main()
{ int a[10];
int i,j,t;
printf("input 10 numbers:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);//输入10个数值
printf("\n");
for(j=0;j<9;j++) //进行9轮比较
for(i=0;i<9-j;i++) //每一轮中进行9-j次比较
if(a[i]<a[i+1]) //相邻两个数比较
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
printf("output 10 numbers:\n");
for(i=0;i<10;i++)
printf("%d ",a[i]); //按顺序输出10个数值
printf("\n");
return 0;
}
当然很多行可以省掉。只是这样更清楚。
追问太感谢了
本回答被提问者采纳不是很明白