#includeusing namespace std;
void swap(int &i,int &j)//實現i,j交換的函式
void display(const int *arr,int length)
int i;
for(i=0;i=0 && arr[j]>temp;j--)//一邊比較一邊移動
if(i!=j+1)//如果前面存在比a[i]小的數
}}///氣泡排序
void bubblesort(int *arr,int length)//氣泡排序
int i,j;
bool change=true;//對氣泡排序的優化
for(i=0;iarr[j+1])//通過異或實現高效資料交換
} }}
/簡單選擇排序//
void selectsort(int *arr,int length)//簡單選擇排序
int i,min;
for(i=0;iarr[j])
}if(min!=i)
}}快速排序
int partition(int *arr,int left,int right)//將陣列一分為二,並尋找支點的位置
if(j!=i-d)
}}void shellsort(int *arr,int length)//希爾排序
int d=length/2;
while(d>=1) }
堆排序(大頂堆)//
///堆是乙個完全二叉樹,若結點索引從0開始,則i結點的左孩子為2*i+1,右為2*i+2
void heapadjustdown(int *arr,int length,int i)//對第i個值做向下調整,i=0,...,length-1
int temp=arr[i];
int j;//i相當於前驅,j相當於後繼
for(j=2*i+1;j=0;i--)//最後乙個元素的序號為length-1,故該結點的父結點為(length-2)/2 }
void heapdelete(int *arr,int len)//刪堆頂元素,len表示當前表的長度
else }
void heapsort(int *arr,int length)//堆排序
createheap(arr,length);//先建立乙個堆0
int i;
for(i=0;i<=length-1;i++)//刪除length-1次即可,因為最後乙個元素就剩自己了 }
int main()
; display(a,sizeof(a)/sizeof(int));//顯示排序前的元素
//void (*psort)(int*,int)=null;//定義乙個函式指標,方法一
typedef void (*fun)(int *,int);//fun為函式指標類
fun psort=null;//定義函式指標,方法二,與上面等價
// psort=insertsort;
// psort=bubblesort;
// psort=selectsort;
// psort=quicksort;
// psort=shellsort;
psort=heapsort;
if(psort)
display(a,sizeof(a)/sizeof(int));
return 0;
}
C 常用排序演算法的實現
最常用的演算法莫過於氣泡排序 選擇排序 插入排序 快速排序 歸併排序和希爾排序這幾種了。標頭檔案如下 ifndef sorting h define sorting h const static int sg count 10 void bubblesort int pdata,int count ...
常用排序演算法的C 實現
放假沒事幹,複習複習,有空再用python寫一遍 include include include include includeusing namespace std 氣泡排序 void bubblesort vector vec if sorted 選擇排序 void selectionsort ...
常用排序演算法的C 實現
放假沒事幹,複習複習,有空再用python寫一遍 include include include include includeusing namespace std 氣泡排序 void bubblesort vector vec if sorted 選擇排序 void selectionsort ...