#include<stdio.h>
typedef struct Array{
int key;
}Array;
/*
函数目标:
1、找到正确位置插入;
2、high+1之后的所有数据向后移动一位;
3、high+1为正确插入位置;
*/
void HFInsertSort(Array[], int);
#define ARRAYLENGTH 11 //排序元素个数
void main() {
int Arr[ARRAYLENGTH] = { 1,4,2,6,3,12,41,125,421,23,213 };
Array A[ARRAYLENGTH+1];
int index = 1;
while (index <= ARRAYLENGTH) {
A[index].key = Arr[index - 1];
printf("排序前:%d\n",A[index].key);
index++;
}
printf("****************\n");
HFInsertSort(A, ARRAYLENGTH);
index = 1;
while (index <= ARRAYLENGTH) {
printf("排序后:%d\n", A[index].key);
index++;
}
getchar();
}
void HFInsertSort(Array A[], int size) {//自测版
int i, j, mid, low, high;
for (i = 2; i <= size; i++) {
A[0].key = A[i].key;
low = 1, high = i - 1;
while (low <= high)
{
mid = (low + high) / 2;
if (A[mid].key < A[0].key) {
low = mid + 1;
}
else
{
high = mid - 1;
}
}
for (j = i - 1; j >= high + 1; --j) {
A[j + 1].key = A[j].key;
}
A[high + 1].key = A[0].key;
}
}
C:C的排序算法:折半插入排序(HFInsertSort)
最新推荐文章于 2022-09-24 23:14:04 发布