详解冒泡排序--适用于初学者,包会

时间:2022-12-29 20:33:17
1.冒泡排序的基本思想就是:每次都比较两个相邻的元素,如果他们的顺序错误就把他们的位置调换过来 2.例如 5 9 7 6 1 8 13 4 他们每次都是两两比较,所以每一轮要比较n-i次(升续排列每次都会确定一个剩余元素中最大的一个;反之,每次都会确定一个剩余元素中最大的一个)。总共有n个元素要比较n-1轮;(这个都理解吧,不理解的可以自己每两个比较一下试试)。 下面默认升续 第一轮: i=1,比较8-1=7次;先比较5和9,他们的顺序没有错误,不动; 再比较9和7,发现顺序错误,把9和7的位置交换,这样前三个数字的顺序就变成了5,7,9; 接着9和6比较,发现顺序错误,把9和6的位置交换,这样前三个数字的顺序就变成了5,7,6,9; 下面依次类推。。最后的顺序就变成了5,7,6,1,8,9,4,13;确定了序列中的最大元素。 第二轮; i=2,比较8-2=6次;和第一轮一样,依次两两比较,最后确定序列第二大的9的位置。 。。。。。 最后一轮:确定了序列的升续排列1,4,5,6,7,8,9,13;
下面来张图例(百度而来) 详解冒泡排序--适用于初学者,包会
模板代码
#include <stdio.h>
#include <string.h>

using namespace std;
int main()
{
int a[1000];
int i, j, n;
while(~scanf("%d", &n))
{
memset(a, 0, sizeof(a));
for(i = 1; i <= n; i++)
scanf("%d", a + i);
for(i = 1; i <= n-1; i++)//比较n-1趟
for(j = 1; j <= n-i; j++)//每次比较相邻的两个元素,比较前n-i次
{
if(a[j] < a[j+1])//小于号从大到小排序 ,大于号从小到大排序
{
int t = a[j];//数组中的值为变量j
a[j] = a[j + 1];
a[j + 1] = t;
}
}

for(i = 1; i <= n; i++)
printf("%d ", a[i]);
}
return 0;
}

纯手打,学明白的,点个赞奖励一下啦!!
不是很理解的,可以给我留言,我看到的话会回复的! 共同学习,有什么错误,希望一起交流,谢谢!