简介:
冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,是不会再交换的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。
原理图:
我的代码:
main()//冒泡排序,正确
{
int i, j;//循环变量
int n[10];//定义数组10个下标
int z;//临时缓存变量
printf("*************************冒泡排序****************************\n");
printf("请输入10个数值:\n");
for (i = 0; i < 10; i++)
scanf("%d", &n[i]);//保存数值到数组
//主要部分
for (i = 0; i < 9; i++)
for (j = 0; j < 9 - i; j++)
{
if (n[j] > n[j + 1])//数值前后比较
{
z = n[j];//n[j]里的数值缓存到z
n[j] = n[j + 1];//n[j + 1]里小数值传给n[j]
n[j + 1] = z;//n[j]里的数值缓存到z,z赋值给n[j + 1]
}
}
for (i = 0; i < 10; i++)//循环输出数组里的数值
printf("%d ", n[i]);
}
网络参考代码:
void bubble_sort(int arr[], int len) {
int i, j, temp;
for (i = 0; i < len - 1; i++)
for (j = 0; j < len - 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[] = { 22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70 };
int len = (int) sizeof(arr) / sizeof(*arr);
bubble_sort(arr, len);
int i;
for (i = 0; i < len; i++)
printf("%d ", arr[i]);
return 0;
}