bubble sort→排序效率: O(N^2) 將第1和第2比,第2和第3比,...比完陣列後,最大(or 最小)就會在最後一個 再做一次,第2大(第2小)就會在倒數第2個 重覆做n-1次就會排好了   insertion sort→排序效率: O(N^2) 先排好第1和第2個 將第3個依序向前比,插入到適當的位置 重覆做到排好為止   select sort→排序效率: O(N^2) 將要排序的對象分作兩部份,一個是已排序的,一個是未排序的, 從後端未排序部份選擇一個最小值,並放入前端已排序部份的最後一個。   merge sort→排序效率: 比較次數: O(N*LogN) 將陣列分成2小堆 每小堆再繼續用merge sort分割直到適當大小 對每小堆排序 然後將排序好的小堆依次向上合併 因用排序好的陣列合併要快的多,所以比上面的方法快   quick sort→排序效率: 比較次數:O(N*LogN) ~ O(N^2)。平均而言: O(N*Log^N) 找出中間值(常常是隨機取一個數) 將比中間值大的放一堆 比中間值小的放另一堆 分別用quick sort做排序   heap sort→排序效率: 比較次數: O(N*LogN) 要使用heap的資料結構,是完整的二元樹 其任何一點的值都大於(or 小於)其底下子數的值 每插入一個點or提出二元樹的頂點(刪除最大點 or 最小點)都應維持其原本的定義 將所有的數插入到heap內 再將所有的數都拿出來         <例子>   bubble sort   初始狀態 12 56 42 11 95 43 32   第一步後 56 42 12 95 43 32 11   第二步後 56 42 95 43 32 12 11   第三步後 56 42 95 43 32 12 11    第四步後 56 95 43 42 32 12 11   第五步後 56 95 43 42 32 12 11   第六步後 95 56 43 42 32 12 11     insertion sort   初始狀態 12 56 42 11 95 43 32   第一步後 12 56 42 11 95 43 32   第二步後 12 56 42 11 95 43 32   第三步後 12 42 56 11 95 43 32   第四步後 11 12 42 56 95 43 32   第五步後 11 12 42 56 95 43 32   第六步後 11 12 42 43 56 95 32   第七步後 11 12 32 42 43 56 95       select sort 1. [1] 80 31 37 10 70 48 60 33 80 選出最小值1 2. [1 10] 31 37 80 70 48 60 33 80 選出最小值10 3. [1 10 31] 37 80 70 48 60 33 80 選出最小值31 4. [1 10 31 33] 80 70 48 60 37 80 ...... 5. [1 10 31 33 37] 70 48 60 80 80 ...... 6. [1 10 31 33 37 48] 70 60 80 80 ...... 7. [1 10 31 33 37 48 60] 70 80 80 ...... 8. [1 10 31 33 37 48 60 70] 80 80 ...... 9. [1 10 31 33 37 48 60 70 80] 80 ......     merge sort   初始狀態 12 56 42 11 95 43 32   第一步後 12 56 42 11 | 95 43 32 (分一半)   第二步後 12 56 | 42 11 95 43 | 32 (兩邊各自分一半)   第三步後 12 | 56 42 | 11 95 | 43 32 (再分)   第四步後 12 56 | 11 42 43 95 | 32 (合併)   第五步後 11 12 42 56 | 32 43 95 (按照大小合併)   第六步後 11 12 32 42 43 56 95 (完成)   (程式使用遞迴)       quick sort   初始狀態 12 56 42 11 95 43 32   第一步後 32 12 56 42 11 95 43 (隨機挑一個數做標準數)   第二步後 12 11 32 56 42 95 43 (比32大的放一邊 比32小的放一邊)   第三步後 12 11 32 56 42 95 43 (兩邊隨機選數做標準數)   第四步後 11 12 32 42 43 56 95 (小的一邊 大的一邊)       heap sort   要使用heap的資料結構,是完整的二元樹   其任何一點的值都大於(or 小於)其底下子數的值   每插入一個點or提出二元樹的頂點(刪除最大點 or 最小點)都應維持其原本的定義   將所有的數插入到heap內   再將所有的數都拿出來       <程式>   ASP INSERT SORT:  for j = 2 to ubound(vDayAmt)   vTempAmt = vDayAmt(j)    for k = j - 1 to 1 step -1     if vDayAmt(k) > vTempAmt then      vDayAmt(k+1) = vDayAmt(k)      vDayAmt(k) = vTempAmt     end if    next      response.Write "第" & j-1 & "次"    for z= 1 to ubound(vDayAmt)     response.Write vDayAmt(z) & ","    next  next     C:   void selsort(int number[]) {  int i, j, k, m;  for(i = 0; i < MAX-1; i++) {   m = i;    for(j = i+1; j < MAX; j++)     if(number[j] < number[m])      m = j;    if( i != m)     SWAP(number[i], number[m])    printf("第 %d 次排序:", i+1);    for(k = 0; k < MAX; k++)     printf("%d ", number[k]);    printf("\n");  } }   void insort(int number[]) {  int i, j, k, tmp;  for(j = 1; j < MAX; j++) {   tmp = number[j];   i = j - 1;   while(tmp < number[i]) {    number[i+1] = number[i];    i--;    if(i == -1)     break;    }    number[i+1] = tmp;      printf("第 %d 次排序:", j);    for(k = 0; k < MAX; k++)     printf("%d ", number[k]);    printf("\n");  } }   void bubsort(int number[]) {  int i, j, k, flag = 1;    for(i = 0; i < MAX-1 && flag == 1; i++) {   flag = 0;   for(j = 0; j < MAX-i-1; j++) {    if(number[j+1] < number[j]) {     SWAP(number[j+1], number[j]);     flag = 1;     }    }      printf("第 %d 次排序:", i+1);    for(k = 0; k < MAX; k++)     printf("%d ", number[k]);    printf("\n");  } }
文章標籤
全站熱搜
創作者介紹
創作者 ❤ Saori さおり ❤ 的頭像
❤ Saori さおり ❤

♥單純是種快樂♥

❤ Saori さおり ❤ 發表在 痞客邦 留言(0) 人氣(78)