七大排序演算法初步實現

2021-07-11 11:52:59 字數 3664 閱讀 1874

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 在某次遍歷中如果沒有資料交換,說明整個陣列已經有序。因此通過設定標誌位來記錄此次遍歷有無資料交換就可以判斷...