六個排序演算法

2021-08-20 11:55:18 字數 1619 閱讀 4997

直接插入法

官方解釋:直接插入位置的確定方法是將待插入的記錄與有序區中的各記錄自右向左一次比較其關鍵字值得大小

自我理解:直接排序法原理是通過監視哨與前乙個對比如果前一位的資料大於監視哨的資料

資料進行右移

演算法最大趟數45 n(n-1)/2

adjfkalsf直接插入排序法

通過arr[0]進行監視哨

#includeint

main()

;

inti, j, k;

for (k = 1; k < 11; k++)

printf("\n

");for (i = 2; i <= 10; i++)

printf("\n

");for (k = 1; k < 11; k++)

printf("\n

");arr[j + 1] = arr[0

]; }

printf("\n

");for (k = 1; k < 11; k++)

return0;

}希爾排序法

官方解釋:希爾排序是在直接插入排序的基礎上做的改進,也就是將要排序的序列按固定增量分為若干組,等距離者在同一組中,然後再在組內進行直接插入排序。

個人理解:就是設定一步的跨度,然後慢慢縮小步的跨度,最後步跨度為1。

演算法最大趟數:13

相比直接插入排序執行的次數變得少提高效率,而且距離=資料總數/2這樣的步距時演算法躺數最少。

#include

int main()

;int i, j, k;

int f;

for (k= 1; k < 11; k++)

printf("\n");

k = 10 / 2;

while (k >= 1)     

arr[j + k] = arr[0];

}k = k / 2;

}    for (k = 1; k < 11; k++)

printf("\n");

return 0;

}氣泡排序法

官方解釋:如果要對n個數進行氣泡排序,那麼要進行n-1趟比較,在第一趟中要進行n-1次的兩兩比較在j趟比較中要進行n-j次兩兩比較。

個人理解:通過兩兩比較,進行資料置換。最大值會被沉底所以在之後的比較中不用進行比較,所以在j趟中進行n-j趟比較

最大趟數:45 n(n-1)/2

氣泡排序法

void main()

;for(i=1;i<10;i++)

for(j=1;j<11-i;j++)

if(a[j]>a[j+1})

printf("排序後的順序是:\n");

for(i=1;i<=10;i++)

printf("%5d",a[i]);

}快速排序法

void qusort(int s,int start,int end)

return i;

}void show(char arr)}}

}int main(int argc, char *argv)

;show(c);

selectionsort(c);

show(c);

return 0;}

Java實現面試六個演算法

查詢演算法 典型的二分查詢 對於二分查詢演算法要求,查詢前的資料必須是已經排好序的,然後得到陣列的開始位置start和結束位置end,取中間位置mid的資料a mid 跟待查詢資料key進行比較,若 a mid key,則取end mid 1 若 a mid key,則取start mid 1 若 ...

程式設計六個原則

程式設計6大設計原則和23種設計模式,其中6大設計原則如下 1 單一職責原則 不同的類具備不同的職責,各司其職。做系統設計時,如果發現有乙個類擁有了兩種職責,那麼需要考慮可以將這個類分成兩個類嗎?如果真的有必要,那就分開,千萬不要讓乙個類幹的事情太多。ps 乙個類只承擔乙個職責,邏輯解耦,是程式邏輯...

六個彙編指令

格式 adc r m,r m imm 兩邊不能同時為記憶體 寬度要一樣 格式 sbb r m,r m 兩邊不能同時為記憶體 寬度要一樣 格式 xchg r m,r m imm 兩邊不能同時為記憶體 寬度要一樣 格式 byte word dword movs byte ptr es edi byte ...