C語言演算法描述基礎

2021-10-05 11:21:01 字數 4423 閱讀 9341

1.2 選擇排序演算法

1.3 插入排序演算法

1.4 快速排序演算法

2. 查詢演算法

定義:演算法是一些常見問題的通用解決方法

排序演算法可以按照某種順序把一組數字排列好

排序演算法每次只把乙個數字放在合適的位置上,通過大量重複以上過過程最終把所有數字都放到合適的位置上

為了把合適的數字放到合適的位置上可以採用兩種方法:

一種是先確定數字然後找合適的位置

一種是先確定的位置然後找合適的數字放進去

通過不斷交換兩個數字的順序最終把乙個數字放在合適的位置上

特點:先確定位置然後找數字,選擇沒有排列好順序的數字中最前面的位置或最後面的位置,不斷對相鄰兩個數字的順序進行調整直到把合適的數字放到選定位置上

舉例:使用氣泡排序按從小到大順序排列指定陣列

bubble_sort.c

#include

void

bubble_sort

(int

*arr,

int end)}}

return;}

void

print

(int

*arr,

int end)

printf

("\n");

}int

main

(void);

int end =

sizeof

(arr)

/sizeof

(int);

bubble_sort

(arr,end -1)

;print

(arr,end)

;return0;

}

編譯執行結果

3 7 8 12 14 15 21
sizeof()以指向陣列的指標做引數,返回指標的大小而不是指向陣列的大小

特點:採用先確定位置在找數字的方法。選擇沒有排列好順序的數字中最前面或最後面的位置,不斷調整選定位置上的數字和乙個沒有排好序數字的順序,最終把合適的數字放在合適的位置上

舉例:使用選擇排序按從小到大順序排列指定陣列

selection_sort.c

#include

void

selection_sort

(int

*arr,

int size)}}

}void

print

(int

*arr,

int size)

printf

("\n");

}int

main

(void);

int size =

sizeof

(arr)

/sizeof

(int);

selection_sort

(arr,size)

;print

(arr,size)

;return0;

}

編譯執行結果:

3 7 8 12 14 15 21
特點:採用選定數字然後找位置的方法,每次把排序好數字相鄰的數字作為選定數字,把它插入到排好序的數字中合適的位置上,不安把選定數字和相鄰數字進行順序調整,知道把它放在合適的位置上

舉例:使用插入排序按從小到大順序排列指定陣列

insertion_sort.c

#include

void

insertion_sort

(int

*arr,

int size)

elseif(

*(arr + j)

>

*(arr + j -1)

)break;}

}}void

print

(int

*arr,

int size)

printf

("\n");

}int

main

(void);

int size =

sizeof

(arr)

/sizeof

(int);

insertion_sort

(arr,size)

;print

(arr,size)

;return0;

}

編譯執行結果:

3 7 8 12 14 15 21
特點:採用根據數字找位置的方法,把沒有排好序的數字中兩端的數字裡某一端作為基準數字,用基準數字和所有其他數字進行順序調整,比基準數字小的放一邊,比基準數字大的放另一邊,每次對沒有處理過的數字中兩端的數字進行順序調整(其中一定包含基準數字),調整後把不是基準數字的數字排除在外

舉例:使用快速排序按從小到大順序排列指定陣列

quick_sort.c

#include

void

quick_sort

(int

*arr,

int size)

if(key ==

*(arr + tail)&&*

(arr + tail)

<

*(arr + head))if

(key ==

*(arr + head)&&*

(arr + head)

>

*(arr + tail))if

(key ==

*(arr + head)&&*

(arr + head)

<

*(arr + tail))}

if(key ==

*(arr + head))if

(key ==

*(arr + tail))if

(key ==

*(arr + head))if

(key ==

*(arr + tail))}

void

print

(int

*arr,

int size)

printf

("\n");

}int

main

(void);

int size =

sizeof

(arr)

/sizeof

(int);

quick_sort

(arr,size)

;print

(arr,size)

;return0;

}

編譯執行結果:

3 7 8 12 14 15 21
思路:遞迴處理,把問題分解為

1.將乙個數字放到合適的位置

2.對已經排好序的數字左邊的數列進行快速排序

3.對已經排好序的數字右邊的數列進行快速排序

查詢演算法可以從一組數字中找到某個數字

特點:依次把每個數字和要查詢的數字做對比,直到找到為止;如果數字之間沒有任何規律就只能採用順序查詢

特點:如果所有數字已經按照順序排列好了,就可以每次用中間位置的數字和目標數字做對比,這樣可以一次排除掉一半數字,不斷重複以上過程就可以很快找到目標數字

舉例:使用折半查詢演算法查詢指定資料

binary_search.c

#include

int*

binary_search

(int

*arr,

int size,

int num)

else

if(num >

*p_mid)

else

}return

null;}

intmain

(void);

size =

sizeof

(arr)

/sizeof

(int);

printf

("input a num:");

scanf

("%d"

,&num)

; ret =

binary_search

(arr,size,num);if

(null

== ret)

else

return0;

}

編譯執行結果:

desktop linraffe$ binary_search

input a num:6

find 6

desktop linraffe$ binary_search

input a num:66

no such number

不全面有待完善

KMP 演算法詳解(c語言描述)

自大牛matrix67的部落格 a56b b47a a57a a37a a17a 0終於,a 8 b 1 i變為8,j為1。事實上,有可能j到了0仍然不能滿足a i 1 b j 1 比如a 8 d 時 因此,準確的說法是,當j 0了時,我們增加i值但忽略j直到出現a i b 1 為止。這個過程的 很...

排序與查詢演算法(C語言描述)

c 自帶的algorithm庫函式中提供了排序演算法。自帶排序演算法的一般形式為 sort arr m,arr n 將陣列arr的下標為m的元素到下標為n 1的元素進行從小到大排序 sort arr m,arr n,comp 與sort arr m,arr n 相比,這個寫法可以自己定義排序的規則,...

C語言 weak alias描述

macro weak alias define weak alias name,aliasname mweak alias name,aliasname define weak alias name,aliasname extern typeof name aliasname attribute w...