用冒泡排序法对数组中的元素排序
注:此处以升序排列举例(共10个元素)
2 ,4, 3, 5, 8, 6,1, 7, 9, 0
要将其升序排列:
1.将第一个元素与其后的每个元素进行比较
2与4比较:2 < 4
将这两个值交换:4,2,3,5,8,6,7,9,0
交换后2位于第二个元素位置处,2与3比较:2 < 3
交换:4,3,2,5,8,6,7,9,0
…
共比较了9次
(第一个元素共进行了9次比较,第二个元素共进行了8次比较,倒数第一个元素进行了1次比较)
此例子共有10个元素,每个元素要与其后的元素比较10-i-1次(i为之前已经进行过程1的元素个数,可针对过程1设置一个循环控制每个元素需要比较的次数,for(j=0;j<10-i-1;j++) )
共有num个元素,将一个元素进行num-i-1次比较
for (j = 0; j < num - i - 1; j++)
{
if (arr[j] > arr[j+1])
{
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
2.将1中的方法循环
由于第一个元素与最后一个元素比较完成后,又进行第二个元素与其后的每个元素比较,
…
直到倒数第二个元素与其后剩下的一个元素进行比较
即将过程1整体总共进行9次(最后一个元素不必进行过程1),则可在过程1的小循环外加大循环来使所有元素(除了最后一个元素)都能进行过程1
可设置i,for(i=0;i<10-1;i++)
冒泡排序函数如下:
void Bubble(int arr[10], int num)
{
int i = 0;
int j = 0;
int tmp = 0;
for (i = 0; i < num-1; i++)
{
for (j = 0; j < num - i - 1; j++)
{
if (arr[j] > arr[j+1])
{
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
其完整代码为:
#include<stdio.h>
#include<stdlib.h>
//冒泡排序法
void Bubble(int arr[10], int num)
{
int i = 0;
int j = 0;
int tmp = 0;
for (i = 0; i < num-1; i++)
{
for (j = 0; j < num - i - 1; j++)
{
if (arr[j] > arr[j+1])
{
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
void main()
{
int arr[10] = { 2,4,3,5,8,6,1,7,9,0 };
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0;
Bubble(arr, sz);
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
system("pause");
return 0;
}
3.程序执行结果: