1 #include <iostream>
2 /*****
3 *
4 *实现一些基础的排序算法
5 *
6 *****/
7 void display(int R[], int n)
8 {
9 for (int i = 0; i < n; ++i)
10 {
11 std::cout << R[i] << " ";
12 }
13 std::cout << std::endl;
14 }
15
16 /* 1 冒泡排序 */
17 void BubbleSort(int R[], int n)
18 {
19 int i, j;
20 int tmp;
21 for (i = 0;i < n - 1; ++i)
22 {
23 //从后面开始找,将最小的冒到第一个位子
24 for(j = n - 1; j > i; --j)
25 {
26 if (R[j] < R[j - 1])
27 {
28 tmp = R[j];
29 R[j] = R[j - 1];
30 R[j - 1] = tmp;
31 }
32 }
33 }
34 }
35
36 /* 2 直接插入排序 从第二个位子开始排好序 */
37 void InsertSort(int R[], int n)
38 {
39 int i , j;
40 int tmp;
41 for (i = 1; i < n; ++i)
42 {
43 j = i - 1;
44 tmp = R[i];//可以不用这个变量 相当于拿一个数 然后向后找一个合适的位子
45 while(j >= 0 && tmp < R[j])
46 {
47 R[j + 1] = R[j];
48 j--;
49 }
50 R[j+1] = tmp;
51 }
52 }
53
54 /* 3 选择排序 从第一个位子开始选择一个最小的数放在这里 */
55 void SelectSort(int R[], int n)
56 {
57 int i, j, k;
58 int tmp;
59 for (i = 0; i < n; ++i)
60 {
61 k = i;
62 //i 前面的(比i小的)都已经排好序了
63 for (j = i + 1; j < n; ++j)
64 {
65 if (R[k] > R[j])
66 {
67 k = j;
68 }
69 }
70
71 //找到最小的数所在的位子k 将这个数放在i所在的位子
72 if (k != i)
73 {
74 tmp = R[i];
75 R[i] = R[k];
76 R[k] = tmp;
77 }
78 }
79 }
80
81 /* 4 快速排序 从数组的第一个数开始作为基准数,将整个数组的左边放比它小的,右边放比它大的*/
82 void QuickSort(int R[], int s, int t)
83 {
84 int i = s , j = t;
85 int tmp;
86 if(s < t)
87 {
88 tmp = R[s];
89 while(i != j)
90 {
91 //右边找一个比基准数小的
92 while(i < j && tmp <= R[j])
93 {
94 j--;
95 }
96 // 找到了就赋到左边
97 if (i < j)
98 {
99 R[i++] = R[j];
100 }
101 //左边找一个比基准数大的
102 while(i < j && tmp >= R[i])
103 {
104 i++;
105 }
106 //找到了就赋到右边
107 if (i < j)
108 {
109 R[j--] = R[i];
110 }
111 }
112 R[i] = tmp;
113 //一个基准数结束之后 左边和右边再排序
114 QuickSort(R, s, i - 1);
115 QuickSort(R, i + 1, t);
116
117 }
118
119 }
120
121
122 int main()
123 {
124 int r[10] = {3, 4, 5, 2, 1, 0, 9, 8 ,7, 6};
125 QuickSort(r, 0, 10);
126 display(r, 10);
127 }