找到位置
if(L[0] for(j=i-1;j>=high+1;j--) { L[j+1]=L[j]; //记录后移 count4++; //此处 关键字 移动 } L[high+1]=L[0]; //插入记录 count4++; //此处关键字 移动 } printf(\折半插入排序后的结果是:\\n关键字比较了%d次\\n关键字移动了%d次\\n \ for(i=2;i<=num;i++) { printf(\ if(i==0) printf(\ } } void xepx(int L[MAXSIZE],int num) //希尔排序 { creatdata(); int temp; int i,j,d; d=num/2; //确定第一次分组 while(d>=1) //在第一组内进行向后的比较 { for(i=d+1;i<=num;i++) //对各组进行排序 { temp=L[i]; j=i-d; count6++; //如果while(d>=1)成立 则此处有关键字的移动 while((j>0)&&(temp for(i=2;i<=num;i++) { printf(\ if(i==0) printf(\ } } void mppx(int L[MAXSIZE]) //冒泡排序 { creatdata(); int flag=1; int temp; for(int i=1;i<=num && flag!=0;i++) //第一层循环排序 { flag=0; for(int j=1;j<=(num-i);j++) //第二层循环排序 { if(L[j] temp = L[j]; L[j] = L[j+1]; L[j+1] = temp; //进行排序 flag=1; count8=count8+2; //如果if成立 则此处有关键字的移动 } count7++; //由于内部排序上面的if语句 此处有关键字的比较 } } printf(\冒泡排序后的结果是:\\n关键字比较了%d次\\n关键字移动了%d次\\n \ for(i=1;i void xzpx(int L[MAXSIZE]) //选择排序 { creatdata(); int i,j,k,temp; for(i=1;i count9++; //此处有关键字的比较 if(i!=k) { temp=L[i]; L[i]=L[k]; L[k]=temp; //将关键字最小记录与还未排序的第一个数交换 count10+=2; //如果if成立 则关键字有移动(!!!此处有问题 显然if肯定有成立的时候 所以count10会有值 但是测试结果一直是0 搞不清原因) } } } printf(\选择排序后的结果是:\\n关键字比较了%d次\\n关键字移动了%d次\\n \ for(i=1;i /*int partition(int L[MAXSIZE],int low,int high) { int temp,t; int i,j,pos,flag; int change1,change2; temp=L[1]; //保存该元素的值 pos=low; //记录当前位置 change1=change2=0; //记录每次比较的起始元素,距离区间头或尾的偏移量 do { flag=1; //没有元素交换 for(i=high-change1;i>=pos+1;i--) //在左区间进行比较 { if(L[i] void kspx(int L[MAXSIZE],int b,int t) { creatdata(); int i; if(b 行划分 //记录新的 //如果 //从右区间 //如果有元素交 //对区间(b,t) //左区间进
相关推荐: