数据结构与算法:选择排序。选择排序与冒泡排序的区别。

选择排序:选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)

核心思想:扫描所有元素,得到最小元素,比将最小元素与左边第一个元素进行交换;再次扫描剩下所有元素,得到最小元素,与左边第二个元素进行交换,以此类推。

Java代码实现如下:

public void selectSort(int[] arr){
        int min=0;
        int temp;
        for(int i=0;i<arr.length-1;i++){
            min=i;
            for(int j=i+1;j<arr.length;j++){            //从i+1开始,比较剩余n-1个元素
                if(arr[j]<arr[min]){
                    min=j;    //关键在于每次循环,找到最小元素所在的位置
                }
            }
            temp=arr[i];
            arr[i]=arr[min];
            arr[min]=temp;
        }
    }

测试类:

        System.out.println("选择排序前:");
        tbs.displayArr(arr);
        tbs.selectSort(arr);
        System.out.println("选择排序后:");
        tbs.displayArr(arr);

结果显示:

选择排序前:
78  99  35  42  1  
选择排序后:
1  35  42  78  99  

冒泡算法和选择排序的区别:

区别在于:冒泡算法,每次比较发现较小的元素在后面,就交换两个相邻元素,保证较大的排在后面,一次循环结束结果就是讲这一轮最大的置于最后。而选择排序算法的改进在于:先不急于调换位置,先将arr[0]记为最小值,从arr[1]开始逐个检查比较剩余n-1个元素,每次发现arr[i]小于min,则最小元素指向arr[i],直到这一次循环结束,找到最小元素的那个位置min,就把arr[0]和arr[min]调换位置,从而保证arr中最小的数据就被换到了最前面的位置,以此类推,直到从小到大排序完成。

所以,选择排序每扫描一遍数组,只需要一次真正的交换,而冒泡可能需要很多次。但两种算法比较的次数是一样的。

猜你喜欢

转载自blog.csdn.net/trustF/article/details/81225539