|
![]() | 作者: sniper167 [sniper167]
![]() |
登录 |
看了希尔排序的思路后,自己写了个,但是不行 输入 9 8 7 6 5 4 3 2 1 0 排序后是9 9 9 9 9 9 9 9 9 9 请看看 ---------------------------------------------------------- main() {int arr[10],d[3]; int temp,i,j,k; d[0]=5; d[1]=3; d[2]=1; for (i=0;i<10;i++) scanf ("%d",&arr[i]); for (i=0;i<3;i++) for (j=0;j<d[i];j++) for (k=j+d[i];k<10;k+=d[i]) {temp=arr[k]; while (j>=0&&arr[k]<arr[j]) {arr[k]=arr[j];j-=d[i];} arr[j]=temp; } for (i=0;i<10;i++) printf("%5d",arr[i]); getch(); } |
地主 发表时间: 04-05-03 15:21 |
![]() | 回复: lida1818 [lida1818] ![]() |
登录 |
不知道我这个是不是sehll排序,大概是这样吧。 main() { int arr[10]; int temp,i,j; for (i=0;i<10;i++) scanf ("%d",&arr[i]); for (i=5;i>=0;i-=2) for (j=0;j<10-i;j++) { temp=arr[j]; if (arr[j]>arr[j+i]) { arr[j]=arr[j+i]; arr[j+i]=temp; } } for (i=0;i<10;i++) printf("%5d",arr[i]); getch(); } |
B1层 发表时间: 04-05-03 17:33 |
![]() | 回复: sniper167 [sniper167] ![]() |
登录 |
#include <stdio.h> #include <conio.h> void main() {int arr[10],d[3]; int temp,i,j,k,l; d[0]=5; d[1]=3; d[2]=1; for (i=0;i<10;i++) scanf ("%d",&arr[i]); for (i=0;i<3;i++) for (j=0;j<d[i];j++) for (k=j+d[i];k<10;k+=d[i]) {temp=arr[k]; l=k-d[i]; //因为j是循环变量,不应该在循环体内改变它的值,用L代替 while (l>=0&&arr[l]>temp) //你的是(j>=0&&arr[k]<arr[j]),每次复制的都是arr[k]<的值,所以输出的都是9 {arr[l+d[i]]=arr[l];l-=d[i];} arr[l+d[i]]=temp; } for (i=0;i<10;i++) printf("%5d",arr[i]); printf("\n"); getch(); } |
B2层 发表时间: 04-05-03 22:06 |
![]() | 回复: morrel [morrel] ![]() |
登录 |
typedef struct data{ int length; int r[10]; }date; date L; shellsort() { int i,j,d; d=(L.length/2); while (d>0) { for (i=d+1;i<=L.length;++i) if (L.r[i]<L.r[i-d]) { L.r[0]=L.r[i]; for(j=i-d;j>0&&L.r[0]<L.r[j];j-=d) L.r[j+d]=L.r[j]; L.r[j+d]=L.r[0]; } d=d/2; } } quicksort(int low,int high) { int i,j; if (low<high) { i=low; j=high; L.r[0]=L.r[i]; do { while (i<j &&L.r[j]>L.r[0]) --j; if (i<j) {L.r[i]=L.r[j]; ++i; } while (i<j &&L.r[i]<=L.r[0]) ++i; if (i<j) {L.r[j]=L.r[i]; --j; } } while (i!=j); L.r[i]=L.r[0]; quicksort(low,i-1); quicksort(i+1,high); } } heapadjust(int s,int m) {int rc,j; rc=L.r[s]; for(j=2*s;j<=m;j*=2) {if(j<m&&L.r[j]<L.r[j+1])j++; if(rc>=L.r[j])break; L.r[s]=L.r[j];s=j; } L.r[s]=rc; } heapsort() {int i,t; for(i=L.length/2;i>0;--i) heapadjust(i,L.length); for(i=L.length;i>1;--i) {t=L.r[1];L.r[1]=L.r[i];L.r[i]=t; heapadjust(1,i-1); } } main() {int i,c; printf("\nPlease input length numbers:"); scanf("%d",&L.length); for(i=1;i<=L.length;i++) scanf("%d",&L.r[i]); printf("\nplease choose the method of partion:\n"); scanf("%d",&c); switch(c) {case 1:shellsort( );break; case 2:quicksort(1,L.length);break; case 3:heapsort();break; default:printf("Input ERROR!\n");} for(i=1;i<=L.length;i++) printf("%d ",L.r[i]);} |
B3层 发表时间: 04-05-28 17:51 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号