排序算法分类:
各种排序算法的复杂度:
快速排序:
思想:先选定一个基准元素,然后将数组其他元素中比他小的元素都放在它的左边,比它大的元素都放到它的右边,然后左侧和右侧可以再次进行分别排序,分别各自再次选定一个基准元素,再次进行上述排序操作,直至所有元素都有序。
import java.util.Arrays;
public class Testquicksort {
public static void quickSort(int left,int right,int []arr){
if(left>right){//当左侧边界大于右侧边界时无需排序
return;
}
int temp;
int posnumber = arr[left];//选定一个基准元素
int l = left;
int r = right;
while(l<r){
while (arr[r]>= posnumber&&l<r){//右侧元素从右侧边界开始找,索引递减,直至找到一个比基准元素小的值。
//***注意 当选定基准元素为最左侧元素时,需从右侧开始找。***
r--;
}
while (arr[l]<= posnumber&&l<r){//左侧元素从左侧边界开始找,索引递增,直至找到一个比基准元素大的值。
l++;
}
if(l<r){//交换两个元素的值使其满足左侧比基准值小,右侧比基准值大的规则。
temp = arr[r];
arr[r] = arr[l];
arr[l]=temp;
}
}//循环结束后,l和r两个索引重合的位置,就是当前基准元素应该处于的位置。
arr[left]=arr[l];//将基准元素值与该位置的值交换。
arr[l]= posnumber;
quickSort(left,r-1,arr);//递归排序左部
quickSort(r+1,right,arr);//递归排序右部
}
public static void main(String[] args) {
int arr[]={-122,-1,56,7,85,66,-9,45,45,1099,3,4};
quickSort(0, arr.length-1, arr);
System.out.println(Arrays.toString(arr));
}
}