#include
//#define BUF_SIZE 128
//void Swap_element(int *a, int *b);
#include
//#include
#include
void Insert_sort(int *num,int n)
{
int Comparisons_num = 0;
// int t1 = 0;
// int t2 = 0;
int i = 0;
int j = 0;
int tmp = 0;
for(i = 1;i<n;i++)
{
tmp = num[i];//从待插入组取出第一个元素。
j = i-1; //i-1即为有序组最后一个元素(与待插入元素相邻)的下标
while(j>=0&&tmp<num[j]) //temp 为后 num[j] 为前
//注意判断条件为两个,j>=0对其进行边界限制。第二个为插入判断条件
{
// 后 前
num[j+1] = num[j];//若不是合适位置,有序组元素向后移动
j--;
Comparisons_num++;
}
// t1++;//5 1 5 3 4 6 = 1 + 2 + 2 + 1
// Comparisons_num++;
num[j+1] = tmp;//找到合适位置,将元素插入。
}
printf("比较次数:%d\n\n", Comparisons_num);
}
// }
//int value(char ch){
// int no;
// printf("请输入一个整数值:");
// scanf("%d" ,&no);
// printf("您输入的是%d.\n", no);
// return 0;
//}
void input(int arr[5]){//给一维数组输入数据
printf("请输入5个数:\n\n");
for (int i = 0; i < 5; i++)
// scanf("%d", &arr[i]);
// scanf("%d", &arr[i]);
// scanf("%d", &arr[i]);
// scanf("%d", &arr[i]);
scanf("%d", &arr[i]);
// Insert_sort(b,5); //调用insertsort函数给数组b排序
// output(b);//调用output函数输出数组b中的值
}
void output(int arr[5]) // 输出一维数组输入数据
{
for(int i = 0;i < 5;i++) {
printf("%d ", arr[i]);
}
}
void query(char ch[1]){
printf("Continue or Exit? Press n to end.\n\n");
scanf("%c", &ch[0]);
}
int main()
{
char f[1];
// char cd = 'n';
int b[5];
while(true){
// int num[8]={9,3,4,2,6,7,5,1};
input(b);//调用input函数给数组b赋值
printf("\n\n");
Insert_sort(b,5); //调用insertsort函数给数组b排序
output(b);
printf("\n\n");
query(f);
if(strcmp(f, "n") == 0)
break;
}
return 0;
}
//调用output函数输出数组b中的值
//这个函数必须知道元素的个数,所以将元素个数传入。
//可以在函数内部用sizeof求出元素个shu
// for(int i=0;i<5;i++)
//
// {
// printf("%d ",b[i]);
// }
// }while(strcmp(b, "n") != 0);
//
// return 0;
//
// }
//void Print_Comparisons_num(int Comparisons_num)
//{
//
//// printf("移动次数:%d\n", Mobile_num);
// printf("比较次数:%d\n\n", Comparisons_num);
// // 初始化
//
//}
//void Swap_element(int *a, int *b)
//{
// int tmp = *a;
//
// *a = *b;
// *b = tmp;
//
//// Mobile_num += 3; // 一次关键字交换计为3次移动
//}
// 交换元素
//void Insert_sort(int *arr, int len)
//{
// int Comparisons_num = 0;// temp < arr[j], 因此arr[j] 向后移动
// int i, j;
// int tmp; // 待排序的元素
//
// for (i = 0; i < len; i++)
// {
// tmp = arr[i];
// for (j = i - 1; j >= 0 && tmp < arr[j]; j--)
// {
//// Swap_element(arr+j, arr+j+1);
//// int Comparisons_num = 0; // tmp < arr[j],因此arr[j]向后移动
//// Comparisons_num++;
////
// Swap_element(arr+j, arr+j+1);
//
// Comparisons_num++;
//
// }
// arr[j + 1] = tmp;
// }
// printf("比较次数:%d\n\n", Comparisons_num);
//}
//比较方式不同: 5 4 3 2 1 A: 10次(比较&&交换) B:14次(比较||交换)