排序算法 分治-快速-堆排序

快速排序

  

   

private static void sort(int[] arr, int left, int right) {
if(left>=right) return;
int leftIndex=left;
int rightIndex =right;
int key = left;
while (leftIndex<rightIndex){
while(leftIndex<rightIndex && (arr[rightIndex]>=arr[key]))rightIndex--;
while(leftIndex<rightIndex && arr[leftIndex]<=arr[key])leftIndex++;
if(leftIndex<rightIndex){
int tmp= arr[leftIndex] ; arr[leftIndex] = arr[rightIndex]; arr[rightIndex] = tmp;
}
}
int tmp= arr[key] ; arr[key] = arr[rightIndex]; arr[rightIndex] = tmp;
sort(arr,left,rightIndex-1);
sort(arr,rightIndex+1,right);
}

 

归并排序

   

public static void mergeSort(int[] arr,int l,int r) {  //对 l~r 排序
           if (l>=r) return;
            int q = (l+r)/2;
            mergeSort(arr,l,q);  对l~q排序
            mergeSort(arr,q+1,r);  对q+1~r 排序
merge(arr,l,q,r); 合并2个数组 }
public static void merge(int[] arr,int l,int q,int r){
   新建一个数组
   循环L1 L2长度>0
   循环L1
   循环L2
}

 

堆排序

  大顶堆   小顶堆

 

完全二叉树 

第一步构建大顶堆

第二部循环 ,每层循环调整堆 满足性质

private static void heapSort(int[] arr) {
        //创建堆
        for (int i = (arr.length - 1) / 2; i >= 0; i--) {
            //从第一个非叶子结点从下至上,从右至左调整结构
            adjustHeap(arr, i, arr.length);
        }

        //调整堆结构+交换堆顶元素与末尾元素
        for (int i = arr.length - 1; i > 0; i--) {
            //将堆顶元素与末尾元素进行交换
            swap();//重新对堆进行调整
            adjustHeap(arr, 0, i);
        }
    }

private static void adjustHeap(int[] arr, int parent, int length) {
        //将temp作为父节点
        int temp = arr[parent];
        int l= 2 * parent + 1;
        while (l < length) {
            //右孩子
            int r= l + 1;
            // 如果有右孩子结点,并且右孩子结点的值大于左孩子结点,则选取右孩子结点
            if (r< length && arr[l] < arr[r])    l++;
            // 如果父结点的值已经大于孩子结点的值,则直接结束
            if (temp >= arr[l])      break;
            // 把孩子结点的值赋给父结点
            arr[parent] = arr[l];
            //选取孩子结点的左孩子结点,继续向下筛选
            parent = l;
            l= 2 * l+ 1;
        }
        arr[parent] = temp;
    }
}

 

posted @ 2020-04-21 11:28  嘤嘤怪  阅读(287)  评论(0编辑  收藏  举报