二分折半排序

2022-05-23 16:36:08 字數 1366 閱讀 5349

板子:

插入後,每次與中間值相比較,再與左半部分中間值比較,再與右半部份中間值比較,直到找到它自己的位置,

待排序資料:2,1,6,7,4 資料部分:原文

取第乙個元素作為有序表,剩餘的元素作為無序表

其中有序表:2;無序表:1,6,7,4

第一次比較,從無序表中取出第乙個數 1,與中間值2比較,1<2,1插到2的前面,得到

有序表:1,2;無序表:6,7,4

第二次比較,從無序表中取出第乙個數 6,與中間值1比較,6>1,要放在1的後面,再與後半區(有序表:2)的中間值2比較,6>2,6插入到2的後面,得到

有序表:1,2,6;無序表:7,4

第三次比較,從無序表中取出第乙個數 7,與中間值2比較,7>2,7放在2後面,再與後半區(有序表:6)的中間值6比較,7>6,7放在6後面,得到

有序表:1,2,6,7;無序表:4

第四次比較,從無序表中取出第乙個數 4,與中間值2比較,4>2,4放在2後面,再與後半區(有序表:6,7)的中間值6比較,4<6,4放在6前面,最終得到:

1,2,4,6,7

陣列版本;

1 #include2 #include3 #include4

using

namespace

std;

56 #include 7 #include 8

9void bininsertsort(int a, int

n)10

25for(j = i-1; j >= high+1; j--) //

移動元素,騰出空間

26 a[j+1] =a[j];

27 a[high+1] = temp; //

將待排序的元素插入28}

29}3031

intmain()

3239

bininsertsort(nums,n);

40for(int i =0;ii)43}

44return0;

45 }

view code

vector版本;

#include#include#includeusing namespace std;

void bininsertsort(vector& nums, int n)

v.insert(v.begin()+r,nums[i]);

}for(vector::iterator it=v.begin();it!=v.end();it++)

cout<

}int main()

bininsertsort(nums,n);

}return 0;

}

二分 折半 查詢

折半查詢 又叫二分查詢,採用分治思想,適用於不經常變動且查詢頻繁的表 演算法思想 將n個元素 假設n個元素公升序 分為大致相同的兩部分,取data n 2 與目標元素m比較 若data n 2 m return n 2 若data n 2 m 則我們只要在data的左半部分繼續查詢 若data n ...

二分 折半 筆記

菜雞今天又開始了乙個新的演算法,廢話不多說,開始筆記。二分查詢是乙個十分常用的演算法,適用於對帶有單調性的資料進行處理或查詢。大多數題目可能沒那麼顯示,需要自己來找這個單調性在哪,所以這就是乙個重點,具體的用法和 很簡單,就那麼幾行,但是對於折半的條件卻需要有嚴格的要求。牛客 完全平方數 就如這個題...

二分 折半 查詢

二分查詢 請對乙個有序陣列進行二分查詢 輸入乙個數看看該陣列是否存在此數,並且求出下 標,如果沒有就提示 沒有這個數 二分查詢演算法的思路 二分 折半 查詢條件 有序陣列。public class binarysearch 不考慮有重複元素的查詢。int index solutionsearch a...