說到排序,網上一搜就有一大堆的部落格資料,涵蓋各種語言實現,而許多演算法書中更是寫的很詳細,寫此部落格只是記錄下所敲的這幾行**,以便日後檢視。
直接貼domo:
#ifndef sort_h
#define sort_h
#include
#include
using namespace std;
template
class sort
;template
void sort::
bubblesort
(t *array,
const
int length)
//氣泡排序}}
template
void sort::
selectsort
(t *array,
const
int length)
//選擇排序 }}
} template
void sort::
insertsort
(t *array,
const
int length)
//插入排序
array[j]
=temp;
//空出來就是要插入的位置 }}
template
void sort::
quicksort
(t *array,
int left,
int right)
//快速排序
array[i]
=baseval;
quicksort
(array,left,i-1)
;quicksort
(array,j+
1,right);}
} template
void sort::
shellsort
(t *array,
const
int length)
//希爾排序
array[k+gap]
=temp;
//插入的位置 }}
}}}template
void sort::
mergearray
(t array,
int first,
int mid,
int last, t temp)
while
(i <= m)
temp[k++
]= array[i++];
while
(j <= n)
temp[k++
]= array[j++];
for(i =
0; i < k; i++
) array[first + i]
= temp[i];}
template
void sort::
merge
(t array,
int first,
int last,t temp)
//歸併排序
}/**
二叉堆是完全二叉樹或者是近似完全二叉樹。
二叉堆滿足二個特性:
1.父結點的鍵值總是大於或等於(小於或等於)任何乙個子節點的鍵值。
2.每個結點的左子樹和右子樹都是乙個二叉堆(都是最大堆或最小堆)。
i結點的父結點下標就為(i – 1) / 2
它的左右子結點下標分別為2 * i + 1和2 * i + 2
**/template
void sort::
minheapifix
(t *array,
int i,
int heapsize)
// array[i]=temp;
for(
int n =
(heapsize-1)
/2;n>=i;n--)}
template
void sort::
makeminheap
(t *array,
int heapsize)
//建立最小堆
template
void sort::
heapsort
(t *array,
const
int length)
//堆排序 }
template
void sort::
display
(t *array,
const
int length)
}#endif
以上**,在本地都跑過了,以下是驗證**:
#include
#include
"sort.h"
using namespace std;
intmain()
;//;
int array[10]
;const
int length =10;
sort<
int>
*sort = new sort<
int>()
; sort->
display
(testarray,length)
; cout<
"after sort: "
<
// sort->bubblesort(testarray,length); //氣泡排序
// sort->selectsort(testarray,length); //選擇排序
// sort->insertsort(testarray,length); //插入排序
// sort->quicksort(testarray,0,9);
/******堆排序*****/
// sort->makeminheap(testarray,length);
// sort->heapsort(testarray,length);
/********/
// sort->shellsort(testarray,length);
sort->
merge
(testarray,0,
9,array)
; sort->
display
(testarray,length)
; delete sort;
sort =
null
;return0;
}
關於時間複雜度o的比較和穩定性分析:
1.以上**的思路參考自博主morewindows的白話經典演算法
2.此外還有慕課網的這篇文章。傳送門
常見幾種排序演算法的C 描述
注意如果採取的是三數中值分割法的時候需要,將頭,中,尾的三個值中間的轉移到陣列的頭部。這樣來進行partition void quicksort vector arr,int start,int end void bubblesort vector arr void shellsort vector...
幾種常見的排序演算法c 實現
一 選擇排序 演算法思想 對於有n個元素的陣列,一共有n躺排序,每趟排序要保證前i ii項元素已經排好序,對於第i ii趟排序,從第i ii個元素開始遍歷陣列,將當前遍歷元素中最小的值與第i個元素交換。具體 實現如下 include include include using namespace s...
幾種常見排序演算法
幾種常見排序演算法 1氣泡排序 bubble sort 氣泡排序思路 將序列當中的左右元素,依次比較,保證右邊的元素始終大於左邊的元素 第一輪結束後,序列最後乙個元素一定是當前序列的最大值 對序列當中剩下的n 1個元素再次執行步驟1。3.對於長度為n的序列,一共需要執行n 1輪比較 實現 for i...