选择排序的基本思想是:
每一趟(例如第i趟)在后面的 n-i+1 个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到第 n-1 趟做完,待排序元素只剩下一个,就不用再选了。这里主要讲简单选择排序和堆排序。
基本思想:
假设排序表为 L[1....n] ,第i趟排序即从L[i,,,,n] 中选择关键字最小的元素与 L(i) 交换,每一趟排序可以确定一个元素的最终位置,这样经过 n-1 趟排序就可以使整个排序表有序。
简单选择排序的时间复杂度为:O(n^2) 空间复杂度为O(1)该算法为内部排序。
简单选择排序算法的比较次数为O(n^2)
移动次数为O(n)
代码如下(包括每次进行排序的输出):
package it.cast.demo5; public class SelectSort { public static void main(String[] args) { int [] arr=new int[] {2,6,1,4,5}; selectSort(arr); } public static void selectSort(int [] arr){ for (int i = 0; i < arr.length-1; i++) { int min=i;//记录最小位置的下标 for (int j = i+1; j < arr.length; j++) {//从i后面的位置开始比较 if(arr[j]<arr[min]){ min=j;//更新最小元素的下标 } } if(min!=i){ swap(arr,i,min); } System.out.println("进行第"+(i+1)+"次选择排序后的结果:"); for(int k=0;k<arr.length;k++){ System.out.print(arr[k]+" "); } System.out.println(); } } private static void swap(int[] arr, int i, int min) { int temp=arr[i]; arr[i]=arr[min]; arr[min]=temp; } }
运行结果如下:
选择排序代码如下:
package it.cast.demo5; public class SelectSort { public static void main(String[] args) { int [] arr=new int[] {2,6,1,4,5}; selectSort(arr); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]+" "); } } public static void selectSort(int [] arr){ for (int i = 0; i < arr.length-1; i++) { int min=i;//记录最小位置的下标 for (int j = i+1; j < arr.length; j++) {//从i后面的位置开始比较 if(arr[j]<arr[min]){ min=j;//更新最小元素的下标 } } if(min!=i){ swap(arr,i,min); } } } private static void swap(int[] arr, int i, int min) { int temp=arr[i]; arr[i]=arr[min]; arr[min]=temp; } }