在网上看到快速排序算法,试着实现了一下,发现100万的整形列表数据,排列起来,快速排序要比普通排序比如选择或者冒泡排序方法快接近1000倍,如果数组越大估计效果越明显,在此分享一下。
选择排序方法实现如下:
public static void sort(int [] myArray)
{
for(int i=0;i<myArray.length-1;i++)
{
for(int j=i+1;j<myArray.length;j++)
{
if(myArray[j]<myArray[i])
{
int myMax= myArray[i];
myArray[i] = myArray[j];
myArray[j] = myMax;
}
}
}
}
快速排序方法如下:
public static void quickSort(int [] array, int start, int end)
{
int myIndex = start;
int myEndIndex = end;
if(start>end)
{
return;
}
int myValue = array[myIndex];
while (start != end)
{
while (true)
{
if(end<=start || array[end]<myValue)
{
break;
}
end--;
}
while (true)
{
if(end<=start || array[start]>myValue)
{
break;
}
start++;
}
int tmp = array[start];
array[start] =array[end];
array[end] =tmp;
}
array[myIndex] = array[start];
array[start] =myValue;
quickSort(array, myIndex, start-1);
quickSort(array, start+1, myEndIndex);
}
下面是验证代码:
public static void main(String[] args)
{
//随机生成100w长度的整形数据列表
int[] myIntArray = new int[1000000];
Random myR =new Random();
for(int i=0;i<myIntArray.length;i++)
{
myIntArray[i]=myR.nextInt();
}
long myStartTime = System.currentTimeMillis();
quickSort(myInt,0,myIntArray.length-1);
long myEndTime = System.currentTimeMillis();
System.out.println("快速排序消耗时间:"+(myEndTime-myStartTime));
long myStartTime1 = System.currentTimeMillis();
sort(myIntArray);
long myEndTime1 = System.currentTimeMillis();
System.out.println("插入排序消耗时间:"+(myEndTime1-myStartTime1));
}
执行结果如下,单位是毫秒: