@[TOC]常见排序方法总结
快速排序
伪代码(由小至大)
quickSort(A,left,right):
if left<right:
q = partition(A,left,right)
quickSort(A,left,q-1)
quickSort(A,q+1,right)
partition(A,left,right):
x = A[right]
i = left - 1
for j = left to right -1:
if A[j] <= x:
i= i+1
exchange(A[i],A[j])
exchange(A[i+1],A[right])
return i+1
//随机选取比较基准值
random-partition(A,left,right):
index = random(left,right)
exchange(A,right,index)
return partition(A,left,right)
patition执行过程中将数组分为了四个区域(图中p,r对应left,right)
终止时,j=r,partition将数组分为了三个区域。
Java实现(ps根据伪代码很容易转化为任何编程语言~~)
public void quickSort(int[] nums,int left, int right){
if(left<right){
int q = partition(nums,left,right);
quickSort(nums,left,q-1);
quickSort(nums,q+1,right);
}
}
public int partition(int[] nums, int left, int right){
int x = nums[right];
int i = left-1;
for(int j = left; j<right;j++){
if(nums[j]<=x){
i++;
swap(nums,j,i);
}
}
swap(A,i+1,right);
return i+1;
}
public void swap(int[] A, int index1,int index2){
int temp = A[index1];
A[index1] = A[index2];
A[index2] = temp;
}
@Test
public void testQuick(){
int[] nums = {3,2,5,4,9,10,7,100,1,0};
quickSort(nums,0,nums.length-1);
String res = "";
for(int i =0;i<nums.length;i++){
res = res + Integer.toString(nums[i]) + ",";
}
System.out.println(res);
}
leetcode题目相关
一、最小的K个数
https://blog.csdn.net/weiyang__/article/details/112383840
插入排序
未完待续。。。。
参考
1、算法导论第三版