您當前的位置:首頁 > 詩詞

C語言的幾種常見排序方式

作者:由 濤哥 發表于 詩詞時間:2020-02-25

哈嘍,大家好,以下給大家列舉幾種C語言的常見排序方式,希望對大家有所幫助。

第一、氣泡排序(Bubble Sort)

排序原理:重複地遍歷要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。

例子:

void

bubble_sort

int

array

[],

int

n

){

int

i

j

k

for

i

=

0

i

<

n

-

1

i

++

for

j

=

0

j

<

n

-

i

-

1

j

++

if

array

j

+

1

<

array

j

])

{

k

=

array

j

+

1

];

array

j

+

1

=

array

j

];

array

j

=

k

}

for

i

=

0

i

<

n

i

++

printf

“%2d”

array

i

]);

}

二、選擇排序(Selection sort)

工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

例子:

void

selection_sort

int

array

[],

int

n

{

int

i

j

t

for

i

=

0

i

<

n

-

1

i

++

for

j

=

1

+

i

j

<

n

-

1

j

++

if

array

i

>

array

j

])

{

t

=

array

j

];

array

j

=

array

i

];

array

i

=

t

}

for

i

=

0

i

<

n

i

++

printf

“%2d”

array

i

]);

}

三、插入排序(Insertion Sort)

工作原理:是透過構建有序序列,對於未排序資料,在已排序序列中從後向前掃描,找到相應位置並插入。

例子:

void

insert_sort

int

array

[],

int

n

{

int

i

j

temp

//此時的array[0]作為已排序位置

for

i

=

1

i

<

n

i

++

{

temp

=

array

i

];

j

=

i

-

1

while

j

>=

0

&&

array

j

>

temp

{

arr

j

+

1

=

array

j

];

j

——

}

array

j

+

1

=

temp

}

}

四、歸併排序(簡單)

工作原理:歸併排序要稍微複雜一點,歸併排序的實現分為 遞迴實現 與 迭代實現 。

遞迴實現的歸併排序是演算法設計中分治演算法(演算法後期再說)的典型應用,我們將一個大問題分割成小問題分別解決,然後用所有小問題的答案來解決整個大問題。

非遞迴(迭代)實現的歸併排序首先進行是兩兩歸併,然後四四歸併,然後是八八歸併成倍,一直類推直到歸併了整個陣列。

例子:

//模板(字元同)

#include

#define M 10

#define N 10

void

main

()

{

int

a

M

=

{

};

//一開始就有順序

int

b

N

=

{

};

//一開始就有順序

int

c

M

+

N

];

int

i

=

0

j

=

0

k

=

0

// i:a的下標,j:b的下標,k:c的下標

while

i

<

M

&&

j

<

N

//只要a,b均有未取元素

if

a

i

<

b

j

])

c

k

++

=

a

i

++

];

else

c

k

++

=

b

j

++

];

while

i

<

M

c

k

++

=

a

i

++

];

while

j

<

N

c

k

++

=

b

j

++

];

for

i

=

0

i

<

M

+

N

i

++

printf

“%2d”

c

i

]);

}

五、快速排序

工作原理:

在區間中隨機挑選一個元素作基準,將小於基準的元素放在基準之前,大於基準的元素放在基準之後,再分別對小數區與大數區進行排序。

#include

#define N 10

void

quick_sort

int

left

int

right

char

a

[])

{

int

i

j

t

temp

if

left

>

right

return

temp

=

a

left

];

i

=

left

j

=

right

while

i

!=

j

{

while

a

j

>=

temp

&&

i

<

j

j

——

while

a

i

<=

temp

&&

i

<

j

i

++

if

i

<

j

{

t

=

a

i

];

a

i

=

a

j

];

a

j

=

t

}

}

a

left

=

a

i

];

a

i

=

temp

quick_sort

left

i

-

1

);

quick_sort

i

+

1

right

);

}

void

main

()

{

int

i

int

a

N

];

printf

“請輸入%d個元素:”

N

);

for

i

=

0

i

<

N

i

++

scanf

“%d”

&

a

i

]);

quick_sort

0

N

-

1

a

);

for

i

=

0

i

<

N

i

++

printf

“%5d”

a

i

]);

}

總結:以上是五種排序方式的簡單說明,深入刨析有空再寫~

標簽: ++  array  排序  temp  Sort