黑马程序员技术交流社区
标题: 关于冒泡排序 [打印本页]
作者: wx_byrDDXsc 时间: 2016-3-25 20:56
标题: 关于冒泡排序
/*
对冒泡排序的理解.
理解: 45,6,56,345,67,64,23,23 从小到大排列.
第0轮比较:
拿第0个元素45与第1个元素6比较,如果大,则交换.交换. 6,45,56,345,67,64,23,25
再拿第1个元素45与第2个元素56比较,如果大,则交换.不交换. 6,45,56,345,67,64,23,25
再拿第2个元素56与第3个元素345比较,如果大,则交换.不交换. 6,45,56,345,67,64,23,25
再拿第3个元素345与第4个元素67比较,如果大,则交换.交换. 6,45,56,67,345,64,23,25
再拿第4个元素345与第5个元素64比较,如果大,则交换.交换. 6,45,56,67,64,345,23,25
再拿第5个元素345与第6个元素23比较,如果大,则交换.交换. 6,45,56,67,64,23,345,25
再拿第6个元素345与第7个元素25比较,如果大,则交换.交换. 6,45,56,67,64,23,25,345
第0轮比较完成.找到第1大的数.比较了7次.
第1轮比较完成.找到第2大的数.比较了6次.
第2轮比较完成.找到第3大的数.比较了5次.
第3轮比较完成.找到第4大的数.比较了4次.
第4轮比较完成.找到第5大的数.比较了3次.
第5轮比较完成.找到第6大的数.比较了2次.
第6轮比较完成.找到第7大的数.比较了1次.
所以规律:
对于一个长度为len的数组
一共比较 len - 1 轮
轮数+次数 = 长度 - 1 ==> 次数 = 长度 - 1 - 轮数
*/
#include <stdio.h>
int main()
{
//定义数组
int arr[] = {45,6,56,345,67,64,23,25};
//定义长度
int len = sizeof(arr)/sizeof(arr[0]);
//外层循环控制轮数
for (int i = 0; i < len - 1; i++)
{
//内层循环控制次数
for (int j = 0; j < len - 1 - i; j++)
{
//如果当前元素大于它后面的元素,则交换
if (arr[j] > arr[j+1])
{
int temp = arr[j];
arr[j] = arr [j+1];
arr[j+1] = temp;
}
}
}
//打印数组
for (int i = 0; i < len; i++)
{
printf("%d ",arr);
}
return 0;
}
| 欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |