11.13 早上 冒泡排序和选择排序的区别

发布于 2024-11-13  387 次阅读


       //开始冒泡
	for (int i = 0; i < n-1; i++) {
          //注意,最后是i<n-1而不是i<n,当i为n-2时,就剩in[0]没有排了,然后下面就会让它和已经排好了的in[1]进行比较这作为最后一步,即可实现全部排列好(你细品!
	   for (int j = 0; j < n-1-i; j++) {
           //涉及j+1,所以中止到最后j只进行一次,也就是j=0,j<1就行了
            if (in[j] > in[j + 1]) {
				int  temp = in[j];
				in[j] = in[j + 1];
				in[j + 1] = temp;
			}
		}
	}
	return 0;
}

相较于选择排序,这里的 i 和 j 的意义发生了改变

i 和 j 都是起初从0开始,如果想要改变顺序(由大到小还是由小到大),只需要改动 if (in[j] > in[j + 1])即可

外层循环的i是代表已经排好序了的元素数量,也就是已经送了 i 个元素到最右侧,而内层循环j每次循环都必须是从0开始(我选择排序比这个吊好吧)

在这个例子,冒泡是将大的数放到最后

每次外层循环结束时,最大的元素会被“冒泡”到数组的末尾

持续地迭代,将实现全部排序


在冒泡排序中,每一次的内存循环,都是比较相邻的元素的大小,这样做只能保证最末尾的元素是最大/最小的,但是前面的元素仅是相邻的元素大小有了保证

我个人认为,冒泡排序和选择排序,殊途同归

但为什么人家都说选择排序更好,个人看法是:

冒泡排序每一次循环都要不停的交换相邻的值(如果满足条件的话),但是选择排序的每一次内部循环都只是为了判断并找出那个最大的值然后把他标记,最后如果真的判断有的话,将这个值与in[i]进行交换,不会涉及到不停地交换这一步骤

届ける言葉を今は育ててる
最后更新于 2024-12-22