常見的排序演算法

2022-03-27 06:53:19 字數 2255 閱讀 4120

3 #include 4 #include 5

void swap(int &a, int &b)611

1213

//選擇排序:交換移動次數少,o(n2)

14void selectsort(int a,int n)//

或者int *a

1528

}29 swap(a[i], a[index]); //

//這裡一開始錯寫成了swap(a[i], minint);這就不是陣列裡面的交換了.所以要用個index.

30for (int k = 0; k < n; k++)

3134 printf("\n"

);35}36

}3738//

插入排序:

39void insertsort(int a, int n) //

按照寶典編的.(有交換的機制)

4055

// else

56// //這裡的break是必須的,否則j會一直自減.

59// }

60// a[j + 1] = temp; //因為for迴圈j--.即使沒有執行迴圈體,但是j = i-1是一定執行過了.所以無論執行迴圈體,都能妥善處理.

61*/

6263

64//

(2)寫法2(較簡便)

65for (j = i - 1; j >= 0 && temp < a[j]; j--)

6669 a[j + 1] = temp; ///

/因為for迴圈j--.即使沒有執行迴圈體,但是j = i-1是一定執行過了.所以無論執行迴圈體,都能妥善處理.可以拿排好的順序驗證.70}

71}7273

//氣泡排序

74void bubblesort(int a, int

n)7589}

90}91*/

9293

//(2)冒泡形式

94for (i = 0; i < n - 1; i++)

95102

}103

}104

}105

106//

希爾排序

107void shellsort(int a, int

n)108

123else

124break; //

也可以寫成插入排序的(2)

125}

126 a[j + h] =temp;

127}

128}

129}

130131

132//

堆排序(採用weiss的**)

133#define leftchild(i) (2 * (i) + 1)

134void percdown(int a, int i, int

n)135

145if (temp 146149

else

150153

}154 a[i] = temp; //

此處的i是child賦值過來的

155}

156157

void heapsort(int a, int

n)158

165for (i = n-1; i > 0; i--)//

i > 0因為沒有必要和自身交換

166170

}171

172173

//歸併排序

174175

176int

main()

177;

179int len = sizeof(a) / sizeof(a[0]);//

也可以寫作:int len = sizeof(a) / sizeof(int);

182//

selectsort(a, len);

183//

insertsort(a, len);

184//

bubblesort(a, len);

185//

shellsort(a, len);

186heapsort(a, len);

187 clockend =clock();

188for (int i = 0; i < len; i++)

189193

return0;

194 }

常見的排序演算法

一 氣泡排序 include include void swap int a,int b void bubblesort int arr,int size int main void bubblesort a,5 for int i 0 i 5 i cout 二 選擇排序 void selectio...

常見的排序演算法

需要包含的標頭檔案 include stdafx.h include include include 氣泡排序是穩定排序 時間複雜度 o n 2 void swap int a,int b void bubblesort int a,int n void printnum int a,int n a...

常見的排序演算法

排序演算法是最基礎,也是最簡單的演算法思想,因為應用場景多,書寫簡單,所以應用較為普遍,所以在面試和考試的時候,都會涉及到排序演算法,雖然排序演算法種類很多,但是只要理解了思想,然後靈活運用,那麼就不難記憶.排序演算法兩個需要記憶和理解的點就是 演算法思想和時間複雜度.下面我們就介紹和分析一下常見的...