|
如上圖,若兩個(gè)5排序之后交換了位置就是不穩(wěn)定的,沒有交換位置就是穩(wěn)定排序
1.選擇排序
冒泡是相鄰的兩個(gè)交換,選擇法是首元素與最小的交換。 1 void xuanzhepaixu(int* my_array, int len)
2 {
3 for (int i = 0; i < len - 1; i) {
4 for (int j = i 1; j < len; j) {
5 if (my_array[i] > my_array[j]) {// 交換次數(shù)多,不如記錄下表位置效率高
6 int temp = my_array[i];
7 my_array[i] = my_array[j];
8 my_array[j] = temp;
9 }
10 }
11
12 }
13 }
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 // 選擇法排序
6 void xuanzhepaixu(int* my_array, int len)
7 {
8 int min = 0;
9 for (int i = 0; i < len - 1; i) {
10 min = i;
11 for (int j = i 1; j < len; j) {
12 if (my_array[min] > my_array[j]) {
13 min = j;// 保存最小元素的位置
14 }
15 }
16 if ( min != i ) {
17 int temp = my_array[i];
18 my_array[i] = my_array[min];
19 my_array[min] = temp;
20 }
21 }
22 }
23
24 void my_print_array(int* my_array, int len)
25 {
26 for (int i = 0; i < len; i) {
27 printf("]", my_array[i]);
28 }
29 printf("\n");
30 }
31
32 int main()
33 {
34 int my_array[] = {10, 6, 7, 4, 9, 8, 5, 1, 3, 2};
35 int len = sizeof(my_array) / sizeof(int);
36
37 xuanzhepaixu(my_array, len);
38
39 my_print_array(my_array, len);
40
41 system("pause");
42 return 0;
43 }
2.冒泡排序
1 void maopaopaixu(int* my_array, int len)
2 {
3 for (int i = 0; i < len; i) {
4 for (int j = 1; j < len; j) {
5 if ( my_array[j] > my_array[j - 1] ) {
6 int temp = my_array[j];
7 my_array[j] = my_array[j - 1];
8 my_array[j - 1] = temp;
9 }
10 }
11 }
12 }
冒泡算法的優(yōu)化,在待排序數(shù)據(jù)處于一種趨于有序的情況,可以減少判斷次數(shù),比如:1,2,3,4,7,5,6 1 void maopaopaixu(int* my_array, int len)
2 {
3 bool flag = false;
4 for (int i = 0; i < len && !flag; i) {
5 flag = true;
6 for (int j = 1; j < len; j) {
7 if ( my_array[j] > my_array[j - 1] ) {
8 int temp = my_array[j];
9 my_array[j] = my_array[j - 1];
10 my_array[j - 1] = temp;
11 flag = false;
12 }
13 }
14 }
15 }
3.插入排序 默認(rèn)對(duì)兩個(gè)序列進(jìn)行操作:有序序列,無序序列。 可以將無序序列分為兩個(gè)部分
void insert_paixu(int* my_array, int len)
{
int temp = 0;// 存儲(chǔ)基準(zhǔn)數(shù)
int index = 0; // 存儲(chǔ)坑的位置
for (int i = 1; i < len; i) {
temp = my_array[i];
index = i;
for (int j = i - 1; j >= 0; --j) {// 從后往前遍歷
if (temp < my_array[j]) {
my_array[j 1] = my_array[j];
index = j;
}
else break;//最后一個(gè)保存的是最大的元素,此語句可以減少判斷
}
my_array[index] = temp;
}
}
4.希爾排序
|
|
|