插入排序(直接插入排序和折半查找插入排序)

 1 #include <stdio.h>
 2 
 3 // 直接插入排序
 4 void insert_sort(int sz[], int len)
 5 {
 6     for (int i = 2; i < len + 1; i++)
 7     {
 8         // 位置0作为哨兵
 9         sz[0] = sz[i];
10         int j;
11         // 寻找该插入的位置
12         for (j = i - 1; sz[j] > sz[0]; j--)
13         {
14             sz[j + 1] = sz[j];
15         }
16         sz[j + 1] = sz[0];
17     }
18 }
19 // 折半查找插入排序
20 void half_insert_sort(int sz[], int len)
21 {
22     for (int i = 2; i < len + 1; i++)
23     {
24         // 位置0作为哨兵
25         sz[0] = sz[i];
26         // 折半查找该插入的位置
27         int low = 1, high = i - 1;
28         while (low <= high)
29         {
30             int mid = (low + high) >> 1;
31             if (sz[0] < sz[mid])
32                 high = mid - 1;
33             else
34                 low = mid + 1;
35         }
36         for (int j = i - 1; j >= high + 1; j--)
37             sz[j + 1] = sz[j];
38         sz[high + 1] = sz[0];
39     }
40 }
41 
42 int main()
43 {
44     // 0位置未用作为哨兵,待排序数组
45     int a[] = {0, 5, 10, 8, 100, 50, -10, 60};
46     insert_sort(a, 7); // 7为数组实际长度
47     //half_insert_sort(a, 7); 
48     // 输出排序结果
49     for (int i = 1; i < 8; i++)
50     {
51         printf("%d%c", a[i], i == 8 ? '\n' : ' ');
52     }
53     return 0;
54 }
#include <stdio.h>

// 直接插入排序
void insert_sort( int sz[], int len)
{
for ( int i = 2; i < len + 1; i++)
{
// 位置0作为哨兵
sz[ 0] = sz[i];
int j;
// 寻找该插入的位置
for (j = i - 1; sz[j] > sz[ 0]; j--)
{
sz[j + 1] = sz[j];
}
sz[j + 1] = sz[ 0];
}
}
// 折半查找插入排序
void half_insert_sort( int sz[], int len)
{
for ( int i = 2; i < len + 1; i++)
{
// 位置0作为哨兵
sz[ 0] = sz[i];
// 折半查找该插入的位置
int low = 1, high = i - 1;
while (low <= high)
{
int mid = (low + high) >> 1;
if (sz[ 0] < sz[mid])
high = mid - 1;
else
low = mid + 1;
}
for ( int j = i - 1; j >= high + 1; j--)
sz[j + 1] = sz[j];
sz[high + 1] = sz[ 0];
}
}

int main()
{
// 0位置未用作为哨兵,待排序数组
int a[] = { 0, 5, 10, 8, 100, 50, - 10, 60};
insert_sort(a, 7); // 7为数组实际长度
//half_insert_sort(a, 7);
// 输出排序结果
for ( int i = 1; i < 8; i++)
{
printf( "%d%c", a[i], i == 8 ? ' \n ' : ' ');
}
return 0;
}

猜你喜欢

转载自www.cnblogs.com/sqdtss/p/10738386.html