您的位置:首页 > 编程语言 > C语言/C++

c++几种排序算法代码

2017-01-14 11:10 483 查看
1 #include <iostream>
2 #include <vector>
3 using namespace std;
4
5 //交换int
6 void swap(int& a, int& b){
7     int temp = a;
8     a = b;
9     b = temp;
10 }
11
12 //冒泡
13 void BulletSort(vector<int>& nums){
14     int n = nums.size();
15     for (int i = 0; i < nums.size()-1; i++){
16         for (int j = 0; j < nums.size() - i -1; j++){
17             if (nums[j] > nums[j+1]){
18                 swap(nums[j], nums[j+1]);
19             }
20         }
21     }
22 }
23
24 //快排
25 void fastSort(vector<int>&num, int first, int last){
26     if (first < last){
27         int i = first;
28         int j = last;
29         int seed = num[i];
30         while (i<j){
31             while (i < j && num[j] >= seed){
32                 j--;
33             }
34             if (i < j){
35                 num[i++] = num[j];
36             }
37             while (i <j && num[i] <= seed){
38                 i++;
39             }
40             if (i < j){
41                 num[j--] = num[i];
42             }
43         }
44         num[i] = seed;
45         fastSort(num, first, i - 1);
46         fastSort(num, i + 1, last);
47     }
48
49 }
50
51
52 //插入
53 void InsertSort(vector<int>& nums){
54     int n = nums.size();
55     for (int i = 0; i < n; i++){
56         for (int j = i; j > 0; j--){
57             if (nums[j] < nums[j - 1]){
58                 swap(nums[j], nums[j - 1]);
59             }
60         }
61     }
62 }
63
64 //归并数组
65 void mergeArray(vector<int>&nums, int first, int mid, int last, vector<int>temp){
66     int i = first;
67     int j = mid + 1;
68     int m = mid;
69     int n = last;
70     int k = 0;
71     while (i <= m&& j<=n){
72         if (nums[i] < nums[j]){
73             temp[k++] = nums[i++];
74         }
75         else{
76             temp[k++] = nums[j++];
77         }
78     }
79     while (i<=m){
80         temp[k++] = nums[i++];
81     }
82     while (j <= n){
83         temp[k++] = nums[j++];
84     }
85     for (int i = 0; i < k; i++)
86     {
87         nums[first+i] = temp[i];
88     }
89 }
90
91 //归并
92 void mergeSort(vector<int>& nums, int first, int last, vector<int>temp){
93     if (first<last){
94         int mid = (first + last) / 2;
95         mergeSort(nums, first, mid, temp);
96         mergeSort(nums, mid + 1, last, temp);
97         mergeArray(nums,first,mid,last,temp);
98
99     }
100 }
101
102 int main()
103 {
104     vector<int>test;
105     vector<int>temp(4, 0);
106     test.push_back(2);
107     test.push_back(4);
108     test.push_back(1);
109     test.push_back(3);
110     //BulletSort(test);
111     //fastSort(test, 0, 3);
112     //InsertSort(test);
113     //mergeSort(test, 0,3,temp);
114     return 0;
115
116 }

  几种算法的比较如下图所示
  





                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: