java选择排序和冒泡排序

1.区别

选择排序和冒泡排序的区别主要在于算法逻辑、稳定性和交换成本。

  1. 算法逻辑:选择排序和冒泡排序都属于比较排序,但在具体算法逻辑上有所不同。冒泡排序是通过相邻元素之间的比较和交换,将较大(或较小)的元素逐渐“冒泡”到数组的一端。选择排序则是先选择后交换,在一轮比较中,将最大(或最小)的元素与数组的末尾元素交换,然后在剩余的元素中继续选择和交换。
  2. 稳定性:冒泡排序是稳定的排序算法,即相等的元素的顺序不会改变。而选择排序是不稳定的排序算法,因为元素的相对顺序可能会在排序过程中发生改变。
  3. 交换成本:在交换成本方面,选择排序相较于冒泡排序有优势。冒泡排序需要相邻元素之间的比较和交换,而选择排序只需要记录下标,一轮比较结束后才进行数据的调换,因此选择排序的交换次数要少于冒泡排序。

总的来说,选择排序和冒泡排序各有其特点,需要根据具体需求和数据量来选择使用哪种排序算法。

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;
        }
    }
}

运行结果:

java选择排序和冒泡排序_第1张图片

你可能感兴趣的:(Java,java,算法,数据结构)