-
你在複製它,對吧?
int sl_list::search_sl_list(t *v,int n,t x)
類 sl 列表在哪裡? 您想使用模板,是否宣告了模板?
如果你只是在做數字排序和搜尋,就沒有必要使用類和模板,對於我們初學者來說,你只需要能夠實現該功能。 我給你寫一段話。
int search(int a,size t len,int key) 在長度為 len 的陣列 A 中查詢整數鍵
len = sizeof(a) / sizeof(a[0]);
int left = 0,right = len - 1;二分法查詢,兩個邊界,左和右
while(1)
mid = (left + right) / 2;
if(key > a[mid])
left = mid + 1;
else if(key < a[mid]
right = mid - 1; else
break;
return mid;返回下表。
if (right == left )
cout <<" not found ."
return -1;
-
選擇方法的演算法:
假設你需要對 10 個數字進行排序,然後先找到 10 個數字中最小的乙個數字,然後用 10 個數字中的第乙個(下標 0)交換位置,留下 9 個數字(這 9 個數字比剛才選擇的數字大),然後選擇這 9 個數字中最小的乙個,並與第二個位置的數字(下標 1)交換它們, 所以還剩下 8 個數字(這 8 個數字比剛才選擇的數字大)。
以此類推,當剩下兩個數字時,選擇兩個數字中最小的乙個,放在第9個位置(下標8),這樣就只剩下乙個數字了。 這個數字已經在最後一位數字(下標 9)中,因此無需再次選擇。 因此,對於 10 個數字排序,總共需要選擇 9 次(n 個數字排序需要選擇 n-1 次)。
-
山排序是按照增量將關鍵字分成多個組,對每組使用插入排序,然後減小增量,重複一些過程,當增量為 1 時使用插入排序對關鍵字進行排序。
在第乙個增量為 5 的情況下,給定的關鍵字可以按如下方式分組:
18 Hill 的排序組是指上面陣列中的列。 例如,12、28、18 是乙個組,2、4 是另乙個組。
劃分組後,只需對組進行插入和排序,結果為:
28 按行讀取是第乙個排序的結果:12、2、10、20、6、18、4、16、30、8、28。
這是房東的結果。
如果要繼續完成,則需要減少增量。
假設增量減少到 3,則第乙個結果將分組為 3 並重複。 然後將增量減小到 1,並執行直接插入排序。
-
1.排序演算法的實際應用當然是排序。 它將用於實際應用,例如資料統計。
對一組資料進行排序還有助於以後的資料查詢。 重要的是要知道,在有序陣列中查詢和在隨機無序陣列中查詢的時間複雜度和系統成本之間存在著天壤之別。
2.演算法複雜度實際上是乙個估計值,即 o(n)。 首先,o 此操作定義為:如果 f(n) 是正整數 n 的函式,則 xn
o(f(n)) 表示存在乙個正常數 m,使得當 n 大於或等於整數 n0 時,xn 小於或等於 m 乘以 f(n)。 這在演算法中的實際意義如下:
例如,要執行排序演算法,最多需要執行 5n+7 個命令(語句):最多表示迴圈在執行過程中完全執行,即例如,如果迴圈條件為 1-n,則迴圈最多可以執行 n 次。 如果迴圈中有 5 個基本語句(包括遞增迴圈變數 i++),則有 5n 個語句。
然後根據上面 o 函式的定義,這次 xn
5n7。注意,當 n 大於或等於 7 時,5n+7 小於或等於 6n,也就是說我們可以把 6 看作 m,把 n 看作 f(n),所以可以說這個演算法的時間複雜度是 o(n)。 對於其他 o(n2), o(n
logn)等。在計算執行的命令總數時,“最壞情況”(從迴圈的初始條件到迴圈的最終條件,條件分支也應考慮最大可能情況),然後每個基本語句(例如賦值、比較等)都應被考慮在內。
你好! 外觀:0x???指令引用的 0x ???記憶。 記憶體不能"read"或"written"。答:【原件】嚴禁轉載 >>>More
它應該是 fn(5,4),A 的初始值是 4。
在本例中,A++ 實際上返回 a first 的值,然後將 1 加到 a。 >>>More