直接选择排序----java实现
直接选择排序思路: 从待排序数据中选择第一个假定为最小的下标,然后他后面的与他循环比较,得到真的最小值下标,然后最小值前的那一区段依次后移,并把最小值赋值给第一个元素。第二次时,假定第二个为最小,然后他后面的与他循环比较(这样就不会比较到已最小的第一个)。。。。。
package com.sheepmu.text; import java.util.Arrays; import java.util.Comparator; /* * @author sheepmu */ public class Sort { public static void main(String[] args){ int[] arr={64,5,7,89,6,24}; selectSort(arr); // System.out.println(Arrays.toString(arr)); } public static void selectSort(int[] arr){ int len=arr.length; int small=0;//一次比较中最小的下标。 int temp=0; for(int i=0;i<len-1;i++){ small=i; System.out.println("small--设--->"+small); for(int j=i+1;j<len;j++) //把假定最小下标后的下标的值与该值循环比较,找出最小下标 if(arr[j]<arr[small]) small=j; System.out.println("small---真-->"+small); if(i!=small){ // temp=arr[i];//直接交换可能会导致相同的数据元素位置发生变化,引起排序不稳定。 // arr[i]=arr[small]; // arr[small]=temp; temp=arr[small];//!!因为下面移动了,所以若果不先把这个值取出来下面那个arr[small](先temp取代)就不是找出来的那个咯。 for(int k=small;k>i;k--)//把该区段未排序元素顺序后移 arr[k]=arr[k-1]; arr[i]=temp; } System.out.println(Arrays.toString(arr)); } } }