算法练习day3——190320(对数器、归并排序)
生活随笔
收集整理的這篇文章主要介紹了
算法练习day3——190320(对数器、归并排序)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
對數器的概念和使用
運行結果:
2.歸并排序
package Sort;public class MergeSort {public static void main(String[] args) {int[] array= {4,3,7,2,6,4,9};mergeSort(array);for(int i=0;i<array.length;i++)System.out.print(array[i]+" ");}public static void mergeSort(int[] arr) {if(arr==null||arr.length<2)return;sortProcess(arr,0,arr.length-1);//此處注意串的是下標}public static void sortProcess(int[] arr,int L,int R) {if(L==R)return;int mid= L + ((R - L) >> 1);sortProcess(arr,L,mid);sortProcess(arr,mid+1,R);merge(arr,L,mid,R);}public static void merge(int[] arr,int L,int mid,int R) {//注意此處的R是末尾元素的位置,不是長度int[] result=new int[R-L+1];//所以此處求長度應+1int p1=L;int p2=mid+1;int i=0;while(p1<=mid&&p2<=R) {//所以此處比較應該包含mid和R,就是≤,而不是</*if(arr[p1]<arr[p2])result[i++]=arr[p1++];elseresult[i++]=arr[p2++];*/result[i++]=arr[p1]<arr[p2]?arr[p1++]:arr[p2++];}/*if(p1>mid)while(p2<=R)result[i++]=arr[p2++];if(p2>R)while(p1<=mid)result[i++]=arr[p1++];*/while(p1<=mid) {//p1沒越界,即p2越界result[i++]=arr[p1++];}while(p2<=R) {result[i++]=arr[p2++];}for(int j=0;j<result.length;j++) {//復制元素的時候,要注意下標,因為傳入的arr是從L~R的,不是從0~arr.length-1arr[j+L]=result[j];}}}算法復雜度:
使用master公式:
?
額外空間復雜度:,一個輔助數組的大小。
?
?
?
總結
以上是生活随笔為你收集整理的算法练习day3——190320(对数器、归并排序)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法练习day4——190321(小和、
- 下一篇: 算法练习day2——190319(大顶堆