sorts.h
#ifndef __sorts_h__
#define __sorts_h__
//資料交換
void swap(int& a, int& b);
//氣泡排序
void bubblesort(int a, int n);
//快速排序
void quicksort(int a, int n);
void quicksortpartition1(int a, int beg, int end);
void quicksortpartition2(int a, int beg, int end);
//插入排序
void insertsort(int a, int n);
//shell排序
void shellsort(int a, int n);
//歸併排序
void mergesort(int a, int n);
void mergesortstep(int a, int beg, int end, int temp);
void mergearray(int a, int beg, int middle, int end, int temp);
//基數排序
void radixsort(int a, int n);
int preradixsort(int a, int n, int weight, int bits);
void radixsortstep(int a, int n, int bits, int temp);
//堆排序
enum heaptype
;typedef int heapelement;
typedef struct _tagheap
heap;
void heapsort(heapelement a, int n);
heap* creatheap(heaptype type, int n);
void insertele2heap(heap* heap, heapelement ele);
void deleteheaptop(heap* heap);
void popheap(heap* heap);
void keepbalanceforinsert(heap* heap, int index);
void keepbalancefordelete(heap* heap, int index);
#endif
sorts.cpp
#include "sorts.h"
#include #include #include //資料交換
void swap(int& a, int& b)
}//氣泡排序
void bubblesort(int a, int n)
else
}i += k; }}
//快速排序
void quicksort(int a, int n)
void quicksortpartition1(int a, int beg, int end)
}} swap(a[++i], a[end]);
quicksortpartition1(a, beg, i - 1);
quicksortpartition1(a, i + 1, end); }}
void quicksortpartition2(int a, int beg, int end)
j--;
}while (i < j)
i++;
}} a[i] = x;
quicksortpartition2(a, beg, i - 1);
quicksortpartition2(a, i + 1, end); }}
//插入排序
void insertsort(int a, int n)
else
break;
} a[j + 1] = x; }}
//shell排序
void shellsort(int a, int n)
else
}a[k + g] = x;
}} }
}//歸併排序
void mergesort(int a, int n)
void mergesortstep(int a, int beg, int end, int temp)
}void mergearray(int a, int beg, int middle, int end, int temp)
while (i <= middle)
temp[k++] = a[i++];
while (j <= end)
temp[k++] = a[j++];
for (int i = 0; i < k; i++)
a[beg + i] = temp[i];
}//基數排序
void radixsort(int a, int n)
int weight = 1;
while (1)
radixsortstep(a, n, pbits, ptemp);
weight++; }}
int preradixsort(int a, int n, int weight, int bits)
return ret;
}void radixsortstep(int a, int n, int bits, int temp)
} for (int i = 0; i < n; i++)
a[i] = temp[i];
}//堆排序
void heapsort(heapelement a, int n)
for (int i = 0; i < n; i++)
//for (int i = 0; i < heap->cursize; i++)
// printf("%d ", heap->a[i]);
//printf("\n");
popheap(heap);
free(heap);
}heap* creatheap(heaptype type, int n)
void insertele2heap(heap* heap, heapelement ele)
heap->a[heap->cursize++] = ele;
keepbalanceforinsert(heap, heap->cursize - 1);
}void deleteheaptop(heap* heap)
}void popheap(heap* heap)
printf("\n");
}void keepbalanceforinsert(heap* heap, int index)
} else
} }}
void keepbalancefordelete(heap* heap, int index)
else
if (heap->a[index] > heap->a[exchangeindex])
}else
if (heap->a[index] < heap->a[exchangeindex])
}}}
七大排序演算法
氣泡排序 void bubble int a,int n 選擇排序 void select sort int a,int n n為陣列a的元素個數 將第i 小的數,放在第i 個位置 如果剛好,就不用交換 if i min index 插入排序 typedef int elementtype void...
七大排序演算法
七大排序分類 插入排序 直接插入排序 穩定 希爾排序 不穩定 選擇排序 簡單選擇排序 穩定 堆排序 不穩定 交換排序 氣泡排序 穩定 快速排序 不穩定 歸併排序。直接插入排序 時間複雜度 o n 2 演算法穩定性 穩定void straightinsertsort int a,int n 氣泡排序 ...
七大排序演算法
首先回顧下各種排序的主要思路 一 氣泡排序 氣泡排序主要思路是 通過交換使相鄰的兩個數變成小數在前大數在後,這樣每次遍歷後,最大的數就 沉 到最後面了。重複n次即可以使陣列有序。氣泡排序改進1 在某次遍歷中如果沒有資料交換,說明整個陣列已經有序。因此通過設定標誌位來記錄此次遍歷有無資料交換就可以判斷...