快速排序算法:
快速排序算法使用递归的方法实现,首先选择一个pivot通常选择数组的第一个元素,然后arr从后往前遍历,寻找到第一个小于pivot的值arr[j],然后swap arr[j]跟pivot的位置,然后开始从前往后进行遍历,寻找到第一个大于pivot的值,然后swap arr[i]与pivot的位置,这样遍历直到i==j。这样pivot所在位置左侧的值都将小于pivot,右侧的值都将大于pivot的值,然后就递归的将pivot左侧数组和pivot右侧数组进行同样的快速排序即可。
代码如下:
package test;
import java.util.Arrays;
import java.util.Random;
public class QuickSort {
public static void main(String[] args) {
Random rand = new Random();
int n = rand.nextInt(20)+1;
int arr[] = new int[n];
for(int i=0;i<n;i++)
{
arr[i] = rand.nextInt(30);
}
System.out.println(Arrays.toString(arr));
quickSort(arr,0,n-1);
System.out.println(Arrays.toString(arr));
}
static void quickSort(int arr[],int low,int high)
{
if(low<high)
{
int position = partion(arr,low,high);
quickSort(arr,low,position-1);
quickSort(arr,position+1,high);
}
}
static int partion(int arr[],int low,int high)
{
int i = low;
int j = high;
int privot = arr[i];
while(i<j)
{
while(i<j)
{
if(arr[j]>privot)
{
j--;
}
else
{
int temp = arr[j];
arr[j] = privot;
arr[i] = temp;
i++;
break;
}
}
while(i<j)
{
if(arr[i]<privot)
{
i++;
}
else
{
int temp = arr[i];
arr[i] = privot;
arr[j] = temp;
j--;
break;
}
}
}
return i;
}
}
平均的时间复杂度为O(nlgn)