数据结构 冒泡排序问题 计算交换次数
来源:学生作业帮 编辑:神马作文网作业帮 分类:数学作业 时间:2024/11/14 06:43:22
数据结构 冒泡排序问题 计算交换次数
一组记录(50,40,95,20,15,70,60,45,80)进行冒泡排序时,第一堂需要进行相邻记录的交换次数为___.
答案写的是6次 我怎么觉得是7次 求解具体原因.
一组记录(50,40,95,20,15,70,60,45,80)进行冒泡排序时,第一堂需要进行相邻记录的交换次数为___.
答案写的是6次 我怎么觉得是7次 求解具体原因.
正确答案是6次,冒泡排序算法如下:
for(i = 1; i < n; i++){//设下标从1开始
exchang = false;
for(j = n; j > i; j--)
if(v[j - 1] > v[j]){
Swap(v[j - 1], v[j]);
exchang = true;
}
if(!exchang) return;
}
因此在第一趟,j的值从9到2变化,当j等于1时结束.冒泡过程如下:
j的值 v[j-1] v[j] 是否需要交换 之后的v[j - 1] 之后的v[i]
9 v[8]:45 v[9]:80 否 v[8]:45 v[9]:80
8 v[7]:60 v[8]:45 是 v[7]:45 v[8]:60
7 v[6]:70 v[7]:45 是 v[6]:45 v[7]:70
6 v[5]:15 v[6]:45 否 v[5]:15 v[6]:45
5 v[4]:20 v[5]:15 是 v[4]:15 v[5]:20
4 v[3]:95 v[4]:15 是 v[3]:15 v[4]:95
3 v[2]:40 v[3]:15 是 v[2]:15 v[3]:40
2 v[1]:50 v[2]:15 是 v[1]:15 v[2]:50
从上可知,该趟冒泡共发生了6次交换
for(i = 1; i < n; i++){//设下标从1开始
exchang = false;
for(j = n; j > i; j--)
if(v[j - 1] > v[j]){
Swap(v[j - 1], v[j]);
exchang = true;
}
if(!exchang) return;
}
因此在第一趟,j的值从9到2变化,当j等于1时结束.冒泡过程如下:
j的值 v[j-1] v[j] 是否需要交换 之后的v[j - 1] 之后的v[i]
9 v[8]:45 v[9]:80 否 v[8]:45 v[9]:80
8 v[7]:60 v[8]:45 是 v[7]:45 v[8]:60
7 v[6]:70 v[7]:45 是 v[6]:45 v[7]:70
6 v[5]:15 v[6]:45 否 v[5]:15 v[6]:45
5 v[4]:20 v[5]:15 是 v[4]:15 v[5]:20
4 v[3]:95 v[4]:15 是 v[3]:15 v[4]:95
3 v[2]:40 v[3]:15 是 v[2]:15 v[3]:40
2 v[1]:50 v[2]:15 是 v[1]:15 v[2]:50
从上可知,该趟冒泡共发生了6次交换