1、冒泡排序
void bubble(int arr[],int len) {
bool flag = 0;
int tmp = 0;
for (int i = 0; i < len;i++) {
flag = 0;
for (int j = 0; j < len - i-1;j++) {
if (arr[j]>arr[j+1]) {
flag = 1;
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
if (flag == 0)
break;
}
}
2、選擇排序
void simplechoose(int arr[],int len) {
int tmp;
int index = 0;
for (int i = 0; i < len;i++) {
tmp = arr[i];
index = i;
for (int j = i; j < len;j++) {
if (arr[j] < tmp) {
tmp = arr[j];
index = j;
}
}
int val = arr[i];
arr[i] = arr[index];
arr[index] = val;
}
}
3、快速排序
void quicksort(int arr[],int left,int right) {
int i = left, j = right;
int tmp = arr[i];
while (i<j) {
while (i < j&&tmp < arr[j]) j--;
if (i<j) {
arr[i] = arr[j];
i++;
}
while (i<j&&tmp>arr[i]) i++;
if (i<j) {
arr[j] = arr[i];
j--;
}
}
arr[i] = tmp;
if (left < i) { quicksort(arr, left, i-1); }
if (i < right) { quicksort(arr, i + 1, right); }
}
4、插入排序
void insertsort(int arr[],int len) {
for (int i = 1; i <=len;i++) {
int tmp = arr[i];
int j = i;
while (j>0&&arr[j-1]>tmp) {
arr[j] = arr[j - 1];
j--;
}
arr[j] = tmp;
}
}
5、希爾排序
void xier(int arr[],int len) {
int gap = len / 2;
for (; gap > 0;gap=gap/2) {
for (int i = gap; i < len;i++) {
int tmp = arr[i];
int j = i;
while (j > 0 && arr[j - gap] > tmp){
arr[j] = arr[j - gap];
j = j - gap;
}
arr[j] = tmp;
}
}
}
6、歸併排序
int fuzhu[6] = { 0 };
void merge(int arr[],int left,int lr,int rl,int right) {
int k = left;
int i = left;
while (left<=lr&&rl<=right) {
if (arr[left]<arr[rl]) {
fuzhu[k++] = arr[left++];
}
else {
fuzhu[k++] = arr[rl++];
}
}
while (left<=lr) {
fuzhu[k++] = arr[left++];
}
while (rl<=right) {
fuzhu[k++] = arr[rl++];
}
for (; i <= right;i++) {
arr[i] = fuzhu[i];
}
}
void guibing(int arr[],int left,int right) {
int i = left, j = right;
if (left<right) {
int mid = left + (right - left) / 2;
guibing(arr, left,mid);
guibing(arr,mid+1,right);
merge(arr,left,mid,mid+1,right);
}
}
7、堆排序
void swap(int arr[], int a, int b) {
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
void adjust(int arr[],int i,int len) {
int maxindex = i;
if (i * 2 + 1 < len && arr[i * 2 + 1] > arr[maxindex])
maxindex = i * 2 + 1;
if (i * 2 + 2 < len && arr[i * 2 + 2] > arr[maxindex])
maxindex = i * 2 + 2;
if (maxindex!=i) {
swap(arr, i, maxindex);
adjust(arr,maxindex,len);
}
}
void heapsort(int arr[],int len) {
for (int i=len/2-1; i >= 0;i--) {
adjust(arr,i,len);
}
int tmp = 0;
for (int j = len-1; j >= 0;j--) {
swap(arr, 0, j);
adjust(arr, 0 ,j);
}
}