本人很懒,直接贴代码,提供以下排序的思路
排序规则:每一步将一个待排序的记录,插入到前面已经排好序的有序序列中去,直到插完所有元素为止。 图解:
常规排序思路
void first(int *a, int len) {
for (int i = 1; i < len; i++) {
int j = i;
int temp = *(a + i);
for (; j > 0; j--) {
if (*(a + j - 1) > temp) {
*(a + j) = *(a + j - 1);//把大的往后挪
} else {
break;
}
}
*(a + j) = temp;//填充挪过的空白
}
}
while排序修改
void two(int *a, int len) {
for (int i = 1; i < len; i++) {
int j = i;
int temp = *(a + i);
while (j > 0 && *(a + j - 1) > temp) {
*(a + j) = *(a + j - 1);//把大的往后挪
j--;
}
if (j != i) {
*(a + j) = temp;//填充挪过的空白
}
}
}
二分查找法则:找出小于他的中界点
void three(int *a, int len) {
for (int i = 1; i < len; i++) {
if (*(a + i - 1) > *(a + i)) {
int key = *(a + i);
int low = 0;
int hight = i - 1;
while (low <= hight) {
int mid = (low + hight) / 2;
if (*(a + mid) > key) {
hight = mid - 1;
} else {
low = mid + 1;
}
}
for (int j = i; j > low; j--) {
*(a + j) = *(a + j - 1);
}
*(a + low) = key;
}
}
}
递归排序
void four(int *a, int len) {
if (len < 2) return;
four(a, --len);
int temp = *(a + len);
int index = len - 1;
while (index >= 0 && *(a + index) > temp) {
*(a + index + 1) = *(a + index);
index--;
}
*(a + index+1) = temp;
}