选择排序算法,下面的程序中使用了100万个随机长度的数组进行了测试,已经通过,说明下面的选择排序代码是没有问题的
package sort;
import java.util.Arrays;
public class SelectSort {
public static void swap(int[] arr,int i,int j)
{
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
public static void printArray(int[] arr)
{
for(int elem:arr)
{
System.out.print(elem+"\t");
}
System.out.println();
}
public static void selectSort(int[] arr)
{
if(arr==null || arr.length<2)
{
return;
}
for(int i=0;i<arr.length-1;i++)
{
int minIndex=i;
for(int j=i+1;j<arr.length;j++)
{
minIndex=arr[j]<arr[minIndex]?j:minIndex;
}
swap(arr,i,minIndex);
}
}
public static int[] generateRandomArray(int maxSize,int maxValue)
{
int[] arr=new int[(int)((maxSize+1)*Math.random())];
for(int i=0;i<arr.length;i++)
{
arr[i]=(int)((maxValue+1)*Math.random()-(int)(maxValue*Math.random()));
}
return arr;
}
public static int[] copyArray(int[] arr)
{
int[] arr2=new int[arr.length];
for(int i=0;i<arr.length;i++)
{
arr2[i]=arr[i];
}
return arr2;
}
public static boolean arrayIsEqual(int[] arr1,int[] arr2)
{
if(arr1.length != arr2.length)
{
return false;
}
else
{
for(int i=0;i<arr1.length;i++)
{
if (arr1[i]!=arr2[i])
{
printArray(arr1);
printArray(arr2);
return false;
}
}
return true;
}
}
public static void main(String[] args) {
int testTime=1000000;
int maxSize=100;
int maxValue=100;
boolean succeed=true;
for(int i=0;i<testTime;i++)
{
int[] arr1=generateRandomArray(maxSize,maxValue);
int[] arr2=copyArray(arr1);
selectSort(arr1);
Arrays.sort(arr2);
if(!arrayIsEqual(arr1,arr2))
{
succeed=false;
break;
}
}
System.out.println(succeed?"Nice":"Failed!");
int[] arr=generateRandomArray(maxSize,maxValue);
printArray(arr);
selectSort(arr);
printArray(arr);
}
}
执行结果如下:
Nice
-7 8 -79 -20 -8 25 4 53 3 -4 -8 36 15 24 -67 -33 -54 -55 -1 34 18 -82 -22 11 -12 -58 20 -19 50 60 32 -6 -64 36 37 55 79 22 -3 -42 2 -90 -73 -43 5 8 90 22 76 17 0 -61 23 -56 12 -90 -46 29 -34 25 -1 52 17 54 -11 -54 36 15
-90 -90 -82 -79 -73 -67 -64 -61 -58 -56 -55 -54 -54 -46 -43 -42 -34 -33 -22 -20 -19 -12 -11 -8 -8 -7 -6 -4 -3 -1 -1 0 2 3 4 5 8 8 11 12 15 15 17 17 18 20 22 22 23 24 25 25 29 32 34 36 36 36 37 50 52 53 54 55 60 76 79 90