C语言的数组选择排序

选择排序的核心:
开始认定最小值下标为i,从j = i+1的位置起找真实最小值下标,如果计算的真实最小值下标与i不等,互换元素。

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static void chooseSort4Str(char **arr, int len) {

for (int i = 0; i < len; i++) {
int min = i;

for (int j = i + 1; j < len; j++) {

if (strcmp(arr[min], arr[j]) < 0) {
min = j;
}
}

if (i != min) {
char *temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
}


static void test01() {
char *pArray[] = {"fff", "bbb", "ccc", "aaa", "eee", "ddd"};

int arrLen = sizeof(pArray) / sizeof(pArray[0]);

chooseSort4Str(pArray, arrLen);

for (int i = 0; i < arrLen; i++) {
printf("%s\n", pArray[i]);
}

printf("%d\n", arrLen);

}


/**
* 选择排序:
* 认定最小值下表为i,从开始i+1位置起,找真实下标值,若真实下标值与i不等,则互换元素。
* @param arr
* @param len
*/
static void chooseSort(int *arr, int len) {

for (int i = 0; i < len; i++) {
int min = i;
for (int j = i + 1; j < len; j++) {
if (arr[min] > arr[j]) {
min = j;
}
}
if (i != min) {
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
}


static void test02() {
// 选择排序
int arr[] = {3, 1, 2, 5, 4};
int lenArr = sizeof(arr) / sizeof(arr[0]);

chooseSort(arr, lenArr);

for (int i = 0; i < lenArr; i++) {
printf("%d\n", arr[i]);
}


}

int main04(int argc, char *argv[]) {

// test02();
test01();

return 0;
}