1. 程式人生 > 實用技巧 >Hbase基礎(七):Sqoop 的簡單使用案例

Hbase基礎(七):Sqoop 的簡單使用案例

時間複雜度:O(nlongn)二分一次需要logn,需要n

空間複雜度:O(n)需要陣列同樣大小的臨時空間

將陣列按照二分法,分成兩塊,分別各自排順序

給出如下陣列

將兩部分分別排好序

然後用分別排好序的陣列

首先,將原陣列複製一遍,藍色箭頭表示原陣列,紅色箭頭表示新陣列

將複製的陣列分成兩部分,每一個部分的第一個元素進行比較

選出小的元素放入原陣列,藍色箭頭後移到下一位,選中的紅色箭頭也後移到下一位

每一輪,紅色陣列前半部分和後半部分的元素進行比較,將小的元素填入藍色陣列。之後選擇下一個元素進入下一輪比較,以此類推

定義三個標記位置

ij表示需要比較的元素,k表示比較後需要放入的位置

知道了歸併的思想,再用遞迴的方法寫歸併函式

//將arr[l,mid]和arr[mid+1,r]兩部分進行歸併
template<typename T>
void __merge(T arr[], int l, int mid, int r) {//確定元素放置在原陣列中的位置
    T aux[r - l + 1];
    for(int i=l;i<=r;i++){
        aux[i-l] == arr[i];
    }
    int i = l, j = mid + 1;
    for (int k = l; k <= r; k++) {
        
if(i>mid){//判斷是否越界 arr[k] = aux[j-l]; j++; } else if (j > r) {//判斷是否越界 arr[k] = aux[i - l]; i++; } else if (aux[i - l] < aux[j - l]) {//如果i-1小,i-1就放入k中 arr[k] = aux[i - l]; i++; }
else {//如果j-1小,j-1就放入k中 arr[k] = aux[j - l]; j++; } } } //遞迴使用歸併排序,對arr[l,r]範圍進行排序 template <typename T> void __mergeSort(T arr[], int l, int r) { if (l >= r) {//一個元素都沒有,資料集為空 return; } int mid = (l + r) / 2; __mergeSort(arr, l, mid);//左半部分歸併排序 __mergeSort(arr, mid + 1, r);//右半部分歸併排序 __merge(arr, l, mid, r);//歸併 } template<typename T> void mergeSort(T arr[], int n) { __mergeSort(arr, 0, n - 1);//第n個是空的,n-1有值 }