数组排序之选择排序

来源:互联网 发布:下载微博软件 编辑:程序博客网 时间:2024/06/09 22:26

数组排序之选择排序

package arraysort;/*2017 * 直接排序法 * a.length=6 * a[0] a[1] a[2] a[3] a[4] a[5] * 先确定a[0]为最小值依次和a[1] a[2] a[3] a[4] a[5]比较,取得最小值 *  * 初始值:34 19 11 109 3 56 * 先确定a[0]为最小值:19 34 11 109 3 56     //a[0]和a[1]比较 * 11 34 19 109 3 56  //a[0]和a[2]比较 * 11 34 19 109 3 56  //a[0]和a[3]比较 * 3  34 19 109 11 56    //a[0]和a[4]比较 * 3  34 19 109 11 56  //a[0]和a[5]比较 * 依次确定a[1]为次小值(a[0]固定) * 依次确定a[2]为次小值(a[0] a[1]固定) * ... * ------------------------------------------------------------------- *提高效率的直接选择排序 *初始化:    34   19 11 109  3   56 *第一轮:   [3]  19    11   109  (34)  56  *第二轮: 3  [11]  (19)  109   34   56 *第三轮: 3   11    [19] 109   34   56 *第四轮:3   11     19   [34]   109  56 *第五轮:3   11     19   34   [56]   109  *summary:只需要找出每轮最小值,固定在index为0上(同理每轮最大也固定index=a.length-1上) *      依次找出每轮最小值,固定在index为0+1上 *''''''''''依次循环即可*/public class SelecSortDemo {public static void main(String[] args) {int[] a = { 34, 19, 11, 109, 3, 56 };// selectSort(a);selectSortPlus(a);}public static void selectSort(int[] arr) {for (int i = 0; i < arr.length - 1; i++) {// 控制外循环次数for (int j = i + 1; j < arr.length; j++) {if (arr[i] > arr[j]) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}printArr(arr);}}public static void selectSortPlus(int[] arr) {for (int i = 0; i < arr.length - 1; i++) {// 固定外循环的次数int Min = arr[i];int minIndex = i;for (int j = i + 1; j < arr.length; j++) {if (Min > arr[j]) {// 求最小值Min = arr[j];minIndex = j;}}/* * for (int k = i; k < arr.length; k++) {//找最小值索引的方式可以和↑上面的循环写在一起 * if(Min==arr[k]){ minIndex=k; } } */if (minIndex != i) {int temp = arr[i];arr[i] = Min;arr[minIndex] = temp;}printArr(arr);}}public static void printArr(int[] arr) {for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}System.out.println();}}