一、排序演算法
冒泡、選擇、插入、希爾、快速、歸併、堆和計數排序(省略了基數排序和桶排序)
以及c語言自帶的排序函式
#include #includetypedef
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.例...