插入排序的三种方法
2017-06-19 21:37
447 查看
一、直接插入排序
1、平均时间复杂度为O(n^2)
2、最好情况为O(n)
3、最坏情况下为O(n^2)
4、空间复杂度为O(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
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
二、折半插入排序
1、平均时间复杂度为O(n^2)
2、最好情况为O(nlogn)
3、最坏情况下为O(n^2)
4、空间复杂度为O(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
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
三、希尔排序
1、平均时间复杂度为O(n^1.5)
4、空间复杂度为O(1)
算法实现为:
1、平均时间复杂度为O(n^2)
2、最好情况为O(n)
3、最坏情况下为O(n^2)
4、空间复杂度为O(1)
算法实现为:
/* *直接插入排序 */ #include<stdio.h> #define MaxSize 100 /* *a为待排序的数组,length为数组长度 */ void inSort(int a[] , int length) ; /* *进行数组元素的输出 */ void displayArray(int a[] , int length) ; void main() { int a[MaxSize] , length , i ; printf("Please input the length of the array : \n") ; scanf("%d" , &length) ; //进行数组元素的接收 for(i = 0 ; i < length ; i++) { scanf("%d" , &a[i]) ; } printf("Before sort... \n") ; displayArray(a , length) ; inSort(a , length) ; printf("After sort... \n") ; displayArray(a , length) ; } void inSort(int a[] , int length) { //临时储存元素 int temp ; int i , j ; for(i = 1 ; i < length ; i++) { temp = a[i] ; j = i - 1 ; while(temp < a[j] && j >= 0) { a[j + 1] = a[j] ; j-- ; } a[j + 1] = temp ; } } void displayArray(int a[] , int length) { int i ; for(i = 0 ; i < length ; i++) { printf("%4d ", a[i]); } printf("\n") ; }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
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
二、折半插入排序
1、平均时间复杂度为O(n^2)
2、最好情况为O(nlogn)
3、最坏情况下为O(n^2)
4、空间复杂度为O(1)
算法实现为:
/* *折半插入排序 */ #include<stdio.h> #define MaxSize 100 /* *a为待排序的数组,length为数组长度 */ void binSort(int a[] , int length) ; /* *进行数组元素的输出 */ void displayArray(int a[] , int length) ; void main() { int a[MaxSize] , length , i ; printf("Please input the length of the array : \n") ; scanf("%d" , &length) ; //进行数组元素的接收 for(i = 0 ; i < length ; i++) { scanf("%d" , &a[i]) ; } printf("Before sort... \n") ; displayArray(a , length) ; binSort(a , length) ; printf("After sort... \n") ; displayArray(a , length) ; } void binSort(int a[] , int length) { int i , j , mid , low , high , temp ; for(i = 1 ; i < length ; i ++) { low = 0 ; high = i - 1 ; temp = a[i]; while(low <= high) { mid = (low + high) / 2 ; if(temp < a[mid]) { high = mid - 1 ; }else{ low = mid + 1 ; } } for(j = i - 1 ; j >= low ; j--) { a[j + 1] = a[j] ; } a[low] = temp ; } } void displayArray(int a[] , int length) { int i ; for(i = 0 ; i < length ; i++) { printf("%4d ", a[i]); } printf("\n") ; }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
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
三、希尔排序
1、平均时间复杂度为O(n^1.5)
4、空间复杂度为O(1)
算法实现为:
/* *希尔排序 */ #include<stdio.h> #define MaxSize 100 /* *进行希尔排序 *a为待排序数组,lengh为数组长度,delta为增量数组,length1为增量数组的长度 */ void shellSort(int a[] , int lengh , int delta[] , int length1) ; /* *进行一趟希尔排序 */ void shellInsert(int a[] , int length , int delta) ; /* *进行数组的输出 */ void displayArray(int a[] , int length) ; void main() { int a[MaxSize] , length , i ; int delta[MaxSize] , length1 ; printf("Please input the length of the array : ") ; scanf("%d" , &length) ; //进行数组元素的接收 for(i = 0 ; i < length ; i++) { scanf("%d" , &a[i]) ; } //进行增量数组的接收 printf("Please input the delta's length : ") ; scanf("%d" , &length1) ; //进行数组元素的接收 for(i = 0 ; i < length1 ; i++) { scanf("%d" , &delta[i]) ; } printf("Before sort... \n") ; displayArray(a , length) ; shellSort(a , length , delta , length1) ; printf("After sort... \n") ; displayArray(a , length) ; } void shellSort(int a[] , int length , int delta[] , int length1) { int i ; for(i = length1 - 1 ; i >= 0 ; i--) { shellInsert(a , length , delta[i]) ; } } void shellInsert(int a[] , int length , int delta) { int i , j , temp ; for(i = delta ; i < length ; i++) { temp = a[i] ; j = i - delta ; while(temp < a[j] && j >= 0) { a[j + delta] = a[j] ; j -= delta ; } a[j + delta] = temp ; } } void displayArray(int a[] , int length) { int i ; for(i = 0 ; i < length ; i++) { printf("%4d ", a[i]); } printf("\n") ; }
相关文章推荐
- 三种低级排序方法(冒泡 选择 插入)
- 三种插入排序方法
- 三种排序方法(冒泡、选择、插入)
- <数据结构>——关于插入排序的三种方法
- java三种排序(冒泡,选择,方法sort)
- 白话经典算法系列之二 直接插入排序的三种实现
- 直接插入排序的四种实现方法
- 三种JDBC批量插入编程方法的比较
- 点评 ibatis+oracle 批量插入的三种方法.
- PHP中数组的三种排序方法分享
- PHP中数组的三种排序方法分享
- 三种JDBC批量插入编程方法的比较
- 八大排序方法汇总(选择排序,插入排序-简单插入排序、shell排序,交换排序-冒泡排序、快速排序、堆排序,归并排序,计数排序)
- C#三种经典排序方法
- 直接插入排序的三种实现
- sql下三种批量插入数据的方法
- 白话经典算法系列之二 直接插入排序的三种实现
- PB中实现数据窗口动态排序的三种方法
- 三种排序方法
- NSMutableArray 排序 --- 三种方法