演算法 二分排序

2021-09-27 12:05:43 字數 1395 閱讀 1126

二分排序這個詞是我在面試中遇到的,當時第一反應是二分查詢,然後被打斷,是二分排序演算法,最終才了解到,二分排序就是我們熟知的歸併排序。它又稱二路排序。

首先說一下歸併的思想:先將一組數列,數列中含有n個元素,假設將每乙個元素看成是乙個有序的數列,就是n個有序的子串行,每個子串行的長度為1,然後倆倆合併,此時,有n / 2個長度為2的有序子串行,依次下去,最終整個數列有序。

**示例如下:

//拷貝函式

void

copyarray

(int

*di,

int*si,

int left,

int right)

}void

merge

(int

* arr,

int* tmp,

int left,

int mid,

int right)

else

}while

(i <= mid)

while

(j <= right)

copyarray

(arr, tmp, left, right);}

//遞迴函式

void

passmerge

(int

* arr,

int* tmp,

int left,

int right)

}//過濾函式

void

mergesort

(int

* arr,

int len)

int tmp[10]

;//輔助陣列

passmerge

(arr, tmp,

0, len -1)

;}//列印函式

void

show

(int

* arr,

int len)

printf

("\n");

}

測試**如下:

int

main()

;//int arr = ;

int len =

sizeof

(arr)

/sizeof

(arr[0]

);show

(arr, len)

;//對照表

mergesort

(arr, len)

;show

(arr, len)

;}

測試結果如下:

二分排序演算法

bool check int x 檢查x是否滿足某種性質 區間 l,r 被劃分成 l,mid 和 mid 1,r 時使用 intbsearch 1 int l,int r return l 區間 l,r 被劃分成 l,mid 1 和 mid,r 時使用 intbsearch 2 int l,int ...

二分排序(java)

基本思想就是 將待排序元素分成大小大致相同 的兩個子集合,分別 對兩個子集合進行排序,最終將排好序的子集合合併成所要求的排好序的集合。package com.suanfa 二分排序 author administrator public class merge 合併陣列 public void co...

二分排序和查詢

題目 首先產生隨機數,再進行快速排序,再進行二分查詢。include include include void quiksort int a,int low,int high a i a j while a i temp i j a j a i a i temp quiksort a,low,i 1...