#include<stdlib.h>
#include<stdio.h>
#include<stdbool.h>
/*插入排序 将待排序的元素遍历依次插入到有序的序列当中
1. 直接使用数组存储就可以了
2.稳定的排序
3. T(n)_avg = O(n**2)
4. S(n) = O(1)
*/
void ScanfElement(double *d,int n) {
int i = 0;
printf("开始输入元素:");
double e;
while (i < n) {
scanf_s("%lf",&e);//读取Element value
d[i++] = e;//++先用再加
}
}
void PrintInsertSort(double *d,int n) {
int i = 0;
while (i < n) {
printf("%.2f ",d[i++]);
}
printf("\n");
}
void InsertSort(double *d,int n) {
int i, j;
double tmp;
for (i = 1; i < n;i++) {
tmp = d[i];
for (j = i - 1; j >=0 && tmp < d[j]; j--) {
d[j + 1] = d[j]; //向后移动元素
}
d[j + 1] = tmp;//将元素填入空位 T(n)_avg = O(n**2) 空位是d[j]的后一位
}
}
int main() {
printf("请输入需要排序的元素个数:");
int n;
scanf_s("%d",&n); //n存储元素个数
double* d = (double*)malloc(sizeof(double)*n);
//读取元素
ScanfElement(d, n);
//打印
PrintInsertSort(d,n);
//插入排序
InsertSort(d,n);
PrintInsertSort(d,n);
//释放内存
free(d);
return 0;
}
插入排序之直接插入排序(源码+注释)
最新推荐文章于 2024-10-06 22:44:39 发布