本文介绍: 冒泡排序是通过相邻元素之间的比较和交换,将较大(或较小)的元素逐渐“冒泡”到数组的一端。选择排序则是先选择后交换,在一轮比较中,将最大(或最小)的元素与数组的末尾元素交换,然后在剩余的元素中继续选择和交换。冒泡排序需要相邻元素之间的比较和交换,而选择排序只需要记录下标,一轮比较结束后才进行数据的调换,因此选择排序的交换次数要少于冒泡排序。稳定性:冒泡排序是稳定的排序算法,即相等的元素的顺序不会改变。而选择排序是不稳定的排序算法,因为元素的相对顺序可能会在排序过程中发生改变。
1.区别
选择排序和冒泡排序的区别主要在于算法逻辑、稳定性和交换成本。
- 算法逻辑:选择排序和冒泡排序都属于比较排序,但在具体算法逻辑上有所不同。冒泡排序是通过相邻元素之间的比较和交换,将较大(或较小)的元素逐渐“冒泡”到数组的一端。选择排序则是先选择后交换,在一轮比较中,将最大(或最小)的元素与数组的末尾元素交换,然后在剩余的元素中继续选择和交换。
- 稳定性:冒泡排序是稳定的排序算法,即相等的元素的顺序不会改变。而选择排序是不稳定的排序算法,因为元素的相对顺序可能会在排序过程中发生改变。
- 交换成本:在交换成本方面,选择排序相较于冒泡排序有优势。冒泡排序需要相邻元素之间的比较和交换,而选择排序只需要记录下标,一轮比较结束后才进行数据的调换,因此选择排序的交换次数要少于冒泡排序。
总的来说,选择排序和冒泡排序各有其特点,需要根据具体需求和数据量来选择使用哪种排序算法。
public class ArrayTest {
public static void main(String[] args) {
MyTools mt = new MyTools();
int[] arr = {10, -1, 8, 0, 34};
mt.bubble(arr);
//输出快捷键sout
System.out.println("===冒泡排序后的arr===");
for(int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "t");
}
mt.selectionSort(arr);
System.out.print("n");
System.out.println("===选择排序后的arr===");
for(int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "t");
}
}
}
//创建一个类MyTools,完成int数组升序排序的功能
class MyTools {
public void bubble(int[] arr) {
int temp = 0;
for(int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length - 1 -i; j++) {
if(arr[j] > arr[j+1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
public void selectionSort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
int minValIdx = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[minValIdx] > arr[j]) {
minValIdx = j;
}
}
int temp = arr[minValIdx];
arr[minValIdx] = arr[i];
arr[i] = temp;
}
}
}
运行结果:
原文地址:https://blog.csdn.net/a61233/article/details/134607130
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_1713.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。