目录
第一章:排序算法
1.直接插入排序
2.折半排序-二分排序
第一章:排序算法
1.直接插入排序
#include
void display(int a[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", a[i]);
}
printf("n");
}
void InsertSort(int a[], int size) {
for (int i = 1; i < size; i++) { // 1第 1 个数肯定是有序的,从第 2 个数开始遍历,依次插入有序序列
int x = a[i]; //2做一个临时变量去保存a[i] =x
int j = i - 1; // 从最后比较大小-前移
while (j >= 0 && a[j] > x) { // 越界 + xx 继续前进 16>7
a[j + 1] = a[j]; // 将大于 temp(array[i]) 的数据后移
j--; // 向前比较
} // 结束循环
a[j + 1] = x; // array[i]插入到正确的位置上
//打印每次排序结果
display(a, size);
}
}
int main() {
int a[] = {15,18,29,12,35,32,27,23,10,20};
int size = sizeof(a) / sizeof(int);
//打印原始数据
printf("个数%d n", size);
printf("n");
display(a, size);
InsertSort(a, size);
}
2.折半排序-二分排序
#include
void display(int a[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", a[i]);
}
printf("n");
}
void BInsertSort(int a[],int size)
{
int i,j,low,high,mid,x;
for(i=1;i=x)
high=mid-1;//如果大于x值,则查找范围缩小到左子序列
else
low=mid+1;//如果小于x值,则查找范围缩小到右子序列
}
for(j=i-1;j>=high+1;j--)
a[j+1]=a[j];//将high之后的数据整体后移
a[high+1]=x;//将x值插入该位置
display(a, size);
}
}
int main()
{
int a[]={15,18,29,12,35,32,27,23,10,20};
int size = sizeof(a) / sizeof(int);
printf("个数%d n", size);
printf("n");
display(a, size);
BInsertSort(a,size);
}
#includevoid display(int a[], int size) { for (int i = 0; i < size; i++) { printf("%d ", a[i]); } printf("n"); } void BInsertSort(int a[],int size) { int i,j,low,high,mid,x; for(i=1;i =x) high=mid-1;//如果大于x值,则查找范围缩小到左子序列 else low=mid+1;//如果小于x值,则查找范围缩小到右子序列 } for(j=i-1;j>=high+1;j--) a[j+1]=a[j];//将high之后的数据整体后移 a[high+1]=x;//将x值插入该位置 display(a, size); } } int main() { int a[]={15,18,29,12,35,32,27,23,10,20}; int size = sizeof(a) / sizeof(int); printf("个数%d n", size); printf("n"); display(a, size); BInsertSort(a,size); }



