1.選擇排序
template //選擇排序
void selectionsort(t arr,int n)
arr[j] = e;
}}
3.歸併排序
template//歸併排序
void meregesort(t arr,int qaq,int qbq)
template//遞迴對[l,r]進行排序
void __mergesort(t arr,int l,int r)
template//對[l,mid]和[mid+1,r]進行歸併
void __merge(t arr,int l,int mid,int r)
else if(j>r)
else if(aux[i-l]4.一般快速排序
//對arr[l,r]進行partition操作
//返回p 使得arr[l,p-1]arr[p]
templateint _partition(t arr,int l,int r)
templatevoid quick_sort(t arr,int a,int b)
5.二路快速排序
templateint _partition2(t arr,int l,int r)
swap(arr[l],arr[j]);
return j;
}templatevoid __quick_sort2(t arr,int l,int r)
templatevoid quick_sort2(t arr,int a,int b)
6.三路快速排序
templatevoid __quick_sort3ways(t arr,int l,int r)
else
}swap(arr[l],arr[lt]);
__quick_sort3ways(arr,l,lt-1);
__quick_sort3ways(arr,gt,r);
}templatevoid quick_sort3ways(t arr,int a,int b)
7.堆排序
templateclass maxheap
}public:
maxheap(int capacity)
maxheap(item arr,int n)
int size()
bool isempty()
void insert(item item)
item extractmax()
~maxheap()
};templatevoid heapsort1(t arr,int a,int b)
template//heapify方法
void heapsort2(t arr,int a,int b)
//以上堆排序 需要額外空間
templatevoid __shiftdown2(t arr,int n,int k)
}templatevoid heapsort(t arr,int a,int b)
}//...........
//...........
//索引堆
//...........
//...........
templateclass indexmaxheap
}public:
maxheap(int capacity)
maxheap(item arr,int n)
int size()
bool isempty()
//傳入的i使用者是陣列從0開始,其實堆從1開始
void insert(int i,item item)
item extractmax()
int extractmax()
item getitem(int i)
void change(int i,item newitem)}}
~maxheap()
};
總結 經典排序演算法 C )
最近在學習演算法,趁這個機會總結一些演算法。慢慢更新,歡迎交流 排序 輸入 n個數 輸出 有序 從大到小 從小到大 序列 一 插入排序 做排序的都需要做遍歷,而插入排序,顧名思義,就是插隊。不必多說,給個案例體會一下 輸入 5 4 3 2 1 處理 輸出 1 2 3 4 5 輸入 6 8 2 4 5...
經典排序演算法C 實現
用c 實現了經典的氣泡排序 插入排序 選擇排序 堆排序 快速排序 希爾排序 歸併排序。等空閒的時候再補充每個排序演算法的思想以及易錯點。氣泡排序 void bubble sort vector arr,int n if swaped 0 break else swaped 0 插入排序 withou...
經典排序演算法(C 實現)
氣泡排序 public static int bubblesort int array return array 選擇排序 1.從左至右遍歷,找到最小 大 的元素,然後與第乙個元素交換。2.從剩餘未排序元素中繼續尋找最小 大 元素,然後與第二個元素進行交換。3.以此類推,直到所有元素均排序完畢。pu...