归并排序复杂度分析:
https://segmentfault.com/q/1010000008698385
递归树高logn,每一层需要O(n)复杂度,故为nlogn
快排:
堆排序:
- 从非叶子节点下沉
- 交换收尾,数量-1, 将头下沉
package sort;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class sort1{
private int leftChild(int i)
{
return 2*i+1;
}
private int rightChild(int i)
{
return 2*i+2;
}
public void sort(int []nums)
{
int n = nums.length;
if (n<=1)return ;
for (int i=n/2-1;i>=0;i--)
{
sink(nums,i,n);
}
while (n>0)
{
swap(nums,0,n-1);
n--;
sink(nums,0,n);
}
}
private void sink(int []nums,int i,int n)
{
while(leftChild(i)<n)
{
int j = leftChild(i);
if (j+1<n && nums[j+1]>nums[j])j = j+1;
if(nums[i]>nums[j])break;
swap(nums,i,j);
i = j;
}
}
private void swap(int []nums, int i, int j)
{
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
}
public class HeapSort {
public static void main(String[] args) {
int []nums = new int[]{0,3,2,6,4};
sort1 sort1 = new sort1();
sort1.sort(nums);
for (int i=0;i<nums.length;i++)
{
System.out.println(nums[i]);
}
}
}
排序总结:
https://github.com/CyC2018/CS-Notes/blob/master/notes/%E7%AE%97%E6%B3%95%20-%20%E6%8E%92%E5%BA%8F.md