資料結構與演算法 經典排序演算法實現

2022-07-26 08:54:09 字數 2467 閱讀 4525

一、排序演算法

冒泡、選擇、插入、希爾、快速、歸併、堆和計數排序(省略了基數排序和桶排序)

以及c語言自帶的排序函式

#include #include 

typedef

intelementtype;

void swap(elementtype *a, elementtype *b)

void bubble_sort(elementtype a, int

n) }

if ( flag == 0 ) break; //

若全程無交換,表明已排好序 }}

void select_sort(elementtype a, int

n) }

swap(&a[i-1], &a[index]);

}}void insert_sort(elementtype a, intn)

a[j] =tmp;

}}void shell_sort(elementtype a, int

n)

a[j] =tmp;

}

} }//

qucik sort

#define cutoff 20elementtype median3(elementtype a,

int left, int

right)

void q_sort(elementtype a, int left, int

right)

else

break

; }

swap( &a[i], &a[right - 1] ); //

restroe pivot

q_sort( a, left, i - 1 ); //

from pivot to divid sort

q_sort( a, i + 1

, right );

} else

insert_sort( a, right - left + 1

);

}void quick_sort(elementtype a, intn)

//merge sort需要額外的記憶體空間

void merge(elementtype a, elementtype tmparray, int lpos, int rpos, int

rightend)

while ( lpos <=leftend )

tmparray[tmp++] = a[lpos++];

while ( rpos <=rightend )

tmparray[tmp++] = a[rpos++];

for ( i = 0; i < numelements; i++, rightend--)

}void msort(elementtype a, elementtype tmparray, int left, int

right)

}void merge_sort(elementtype a, intn)

else}/*

堆排序 這裡只插入了n個元素

*/void percdown(elementtype a, int p, int

n) a[parent] =x;

}void heap_sort(elementtype a, int

n) }

void count_sort(elementtype a, int

n)

for ( i = 0; i < n; i++)

count = 0; //

output, from 0 to n -1 in a

for ( i = 0; i < size; i++) }}

}int cmpfunc (const

void * a, const

void *b)

intmain()

printf(

"\nchoose sort:");

printf(

"0:default 1:bubble 2:select 3:insert 4:shell\n");

printf(

"5:quick 6:merge 7:heap 8:count\n

");

scanf("%d

", &flag);

switch

( flag )

printf(

"\narray after sort:

");

for ( i = 0; i < n; i++)

printf(

"%d

", a[i]);

printf("\n

");

} return0;

}

資料結構與演算法(經典排序) 堆排序

include include include include using namespace std int a 100 n 不使用遞迴建立小根堆 效率更高 void slidedown int i,int n 當左節點的值大於父節點時,不做更改 else 如果右節點存在且右節點的值小於父節點 這...

(資料結構與演算法)經典線性表 鍊錶實現

有乙個大神朋友跟我說,學資料結構,就得自己動手寫出這是什麼,用程式做出它是怎麼做的 我們接觸的資料結構有 線性結構和非線性結構。我們常見到的線性結構 線性表 棧 佇列 今天我們來看看這個一直說到的線性表。關於線性表 定義 線性表是具有相同資料型別的n n 0 個資料元素的有限序列。n為表長,n 0時...

排序演算法 經典的排序演算法總結

一 氣泡排序 1.氣泡排序的思想 對於乙個長度為n的陣列,從小到大進行排序。0 n 1範圍內,兩兩進行比較與交換,結果是最大的元素放在陣列的最後面 即n 1位上 0 n 2範圍內,兩兩進行比較與交換,結果是第二大元素放在最後面 即n 2位上 重複上述過程,直到範圍縮小到只有0位的乙個元素為止。2.例...