大神指点
$gcc -Wall filename.c
I、III输出:45,47,50,56
II输出:45,47,0,50
代码: 全选
#include <stdio.h>
typedef unsigned char bool;
#define true 1
#define false (!true)
static int insert_sort(int* p_arr, int count);
/*
*插入排序,成功返回0
*/
int insert_sort(int* p_arr, int count)
{
int res = -1, i = 1;
int s = 0, e = 0, m = (s+e) >> 1;
bool incm = false; /*include m*/
if(NULL == p_arr || count < 0)
goto END;
for(i = 1; i < count; ++i) {
int ec = 0; /*exchange time*/
int j = i;
s = 0;
e = j-1;
while (!(s > e)) {
if (s == e) {
incm = p_arr[j] < p_arr[m];
break;
} else { /*s<e*/
if (p_arr[j] < p_arr[m])
e = m-1, m = (s+e) >> 1;
else
s = m+1, m = (s+e) >> 1;
}
}
/*exchange*/
for (ec = (incm ? j-m : j-m-1); \
ec > 0; --ec, --j) {
代码: 全选
p_arr[j] ^= p_arr[j-1];
p_arr[j-1] ^= p_arr[j];
p_arr[j] ^= p_arr[j-1];
代码: 全选
p_arr[j] ^= p_arr[j-1] ^= p_arr[j] ^= p_arr[j-1];
代码: 全选
int tmp = p_arr[j];
p_arr[j] = p_arr[j-1];
p_arr[j-1] = tmp;
代码: 全选
}
}
res = 0;
END:
return res;
}
#define DLC 4
int main(void)
{
int i = 0;
int x[DLC] = {45, 56, 47, 50};
insert_sort(x, DLC);
for (i = 0; i < DLC; ++i) {
printf("%d;", x[i]);
}
printf("\n");
return 0;
}