C語言的各類排序演算法

2021-10-05 12:02:38 字數 2725 閱讀 2421

快速排序,插入排序,折半插入排序,選擇排序,氣泡排序,歸併排序,堆排序

//

// main.c

// sort

//// created by yingjun on 2020/4/26.

//#include

#define max 13

#include

/** 交換兩個值

*/void

swap

(int

*a,int

*b)/**

列印陣列

*/void

printarray

(int arr,

int length)

}/**

插入排序

1,元素基本有序

2,元素個數比較少

*/void

insertsort

(int arr,

int length)

arr[j]

= temp;}}

/** 折半插入排序(二分插入排序)

*/void

binaryinsertsort

(int arr,

int length)

else

}int temp=arr[i]

;for

(int j=i;j>low; j--

) arr[low]

=temp;}}

/** 希爾排序

*/void

shellsort

(int arr,

int length)

arr[j + gap]

= temp;}}

}/**

氣泡排序

*/void

bubblesort

(int arr,

int length)}}

}/**

選擇排序

*/void

selectsort

(int arr,

int length)

}swap

(&arr[i]

,&arr[minindex]);

}}/** 快速排序

*/void

quicksort

(int arr,

int start,

int end)

if(i//從左往右找比基準數大的

while

(iif(i} arr[i]

=temp;

quicksort

(arr, start, i-1)

;quicksort

(arr, i+

1, end);}

}/**

合併方法

*/void

merge

(int arr,

int start,

int end,

int mid,

int*temp)

else

}//剩餘的i序列的數放入輔助空間

while

(i_start<=i_end)

//剩餘的j序列的數放入輔助空間

while

(j_start<=j_end)

//輔助空間的資料覆蓋到原空間

for(

int i=

0;i/** 歸併排序

*/void

mergesort

(int arr,

int start,

int end,

int*temp)

int mid=

(start+end)/2

;//分組

//左半邊

mergesort

(arr, start, mid, temp)

;//右半邊

mergesort

(arr, mid+

1, end, temp)

;//合併

merge

(arr,start,end,mid,temp);}

void

myswap

(int arr,

int a,

int b)

/** 調整陣列

@param arr 待調整的陣列

@param index 待調整的節點的下標

@param length 陣列的長度

*/void

heapajust

(int arr,

int index,

int length)

if(rchild>arr[max])if

(max!=index)

}/**

堆排序*/void

heapsort

(int arr,

int length)

//交換堆頂元素和最後乙個元素

for(

int i=length-

1; i>=

0; i--)}

intmain

(int argc,

const

char

* ar**)

;heapsort

(arr, max)

;printarray

(arr,13)

;free

(temp)

;return0;

}

各類排序演算法

快速排序 void quicksort int data,int low,int high if a k a i 冒泡法 void maopao int a,int num num元素個數 歸併排序 插入排序 include stdafx.h includeusing namespace std d...

各類排序演算法比較

排序演算法 重點時間複雜度 穩定性直接插入排序 將待插入元素插入到已有序序列中的某個合適位置,得到新有序序列 最壞情況下o n n y折半插入排序 在決定當前元素插入位置時不採用插入查詢的方式,而是二分查詢 相比直接插入,比較的次數明顯減半,但移動的次數沒有減少。所以還是o n n y二路插入排序 ...

各類排序演算法的比較 摘抄

按平均時間將排序分為四類 1 平方階 o n2 排序 一般稱為簡單排序,例如直接插入 直接選擇和氣泡排序 2 線性對數階 o nlgn 排序 如快速 堆和歸併排序 3 o n1 階排序 是介於0和1之間的常數,即0 1,如希爾排序 4 線性階 o n 排序 如桶 箱和基數排序。各種排序方法比較 簡單...