日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

排序算法比较总结

發布時間:2023/12/9 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 排序算法比较总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

冒泡排序

每次從頭開始(每次結束可以不到最后,因為上一次已經確定最大值在末尾了),比較相鄰兩個數,每次下沉一個最大值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
?#include?<iostream>
using?namespace std;
?
void?bubbleSort(int a[], int length)
{
??? bool swapFlag;
??? for (int i = 1; i < length; i++)? //兩個數,冒泡排序1次;length個數,冒泡排序length-1次。
??? {
??????? swapFlag = false;
??????? for (int j = 0; j < length - i; j++) //注意終止條件length-i,每次下沉一個最大數,不用比較到最后已確定的數。
??????? {
??????????? if (a[j] > a[j+1])
??????????? {
??????????????? swapFlag = true;
??????????????? swap(a[j], a[j+1]);
??????????? }
??????? }
?
??????? if (swapFlag == false)
??????? {
??????????? break;
??????? }
??? }
}
?
int?main() {
??? int array[9] = {50, 10, 90, 30, 70, 40, 80, 60, 20};
?
??? bubbleSort(array,9);
?
??? for (int i = 0; i < 9; i++)
??? {
??????? cout << array[i] << endl;
??? }
??? return 0;
}

插入排序

將數插入到已排序數組中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
?#include?<iostream>
#include?<vector>
using?namespace std;
?
template <class?T>
void?insertSort(vector<T> &vec)
{
?
??? for (int i = 1; i < vec.size(); i++)
??? {
??????? int j;
??????? T tmp = vec[i];
?
??????? for (j = i; (j > 0) && (tmp < vec[j-1]); j—) //是后移,不是交換。
??????? {
??????????? vec[j]=vec[j-1];
??????? }
?
??????? vec[j] = tmp;
??? }
}
?
int?main()
{
??? int array[9] = {50, 10, 90, 30, 70, 40, 80, 60, 20};
??? vector<int> intVec(array, array + 9);
??? insertSort(intVec);
?
??? for (vector<int>::iterator iter = intVec.begin(); iter != intVec.end(); iter++) {
??????? cout << *iter << endl;
??? }
}

?

希爾排序

縮減增量排序,特殊的插入排序,每個增量的排序都是插入排序。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
?#include?<iostream>
#include?<vector>
using?namespace std;
?
void?shellSort(vector<int> &a, int length)
{
??? for (int gap = length / 2; gap > 0; gap /= 2)
??? {
??????? for (int i = gap; i < length; i++)
??????? {
??????????? int j;
??????????? int tmp = a[i];
?
??????????? for (j = i; (j - gap >= 0) && (tmp < a[j-gap]); j -= gap)
??????????? {
??????????????? a[j] = a[j-gap];
??????????? }
??????????? a[j] = tmp;
??????? }
??? }
}
?
?
int?main() {
??? int a[] = {9,8,7,6,5,4,3,2,1,0,11};
??? vector<int> vec(a, a+11);
??? shellSort(vec, 11);
?
?
??? for (vector<int>::iterator iter = vec.begin(); iter != vec.end(); iter++) {
??????? cout << *iter << endl;
??? }
?
??? return 0;
}

快速排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
?#include?<iostream>
#include?<vector>
using?namespace std;
?
void?quicksort(vector<int> &v, int left, int right)
{
??? if (left >= right)
??? {
??????? return;
??? }
?
??? int low = left;
??? int high = right;??? //right是結束位,right-1是倒數第一個數。
??? int pivot = v[low];? //第一個值作為中樞值。
?
??? while (low < high)
??? {
??????? while (low < high && v[--high] > pivot)//--high從倒數第一個數向前找到第一個不大于key的值。
??????????? NULL;
??????? while (low < high && v[++low] < pivot)//從第2個數(v[low+1])向后找到第一個不小于key的值(v[low]是中樞值,不參與排序).
??????????? NULL;
?
??????? if (low < high)
??????? {
??????????? swap(v[low], v[high]);
??????? }
??????? else
??????? {
??????????? break;
??????? }
??? }
?
??? swap(v[low], v[left]); //將中樞值與不大于中樞值的最大值交換,至此,v[low]是本次排序中樞值,low左邊的數都不大于中樞值,low右邊的數都不小于中樞值。
??? quicksort(v, left, low);
??? quicksort(v, low + 1, right);
}
?
int?main()
{
??? int a[10] =???? { 9,8,7,9,5,4,3,2,1,0 };
?
??? vector<int> vec(a, a + 10);
??? quicksort(vec, 0, 10);
??? for (vector<int>::iterator iter = vec.begin(); iter != vec.end();iter++)
??? {
??????? cout << *iter << endl;
??? }
?
??? return 0;
}

?

?

?

?

?

?

?

排序算法比較

轉載于:https://www.cnblogs.com/helloweworld/p/3176458.html

總結

以上是生活随笔為你收集整理的排序算法比较总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。