/* Note:Your choice is C IDE */ #include "stdio.h" void main() { int i,j,temp,d,a[10]; printf("请输入数组的元素:\n"); for(i=0; i<10; i++) scanf("%d",&a[i]); /*冒泡排序*/ for(i=9; i>=1; i--) for(j=0; j<=i-1; j++) if(a[j+1]<a[j]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } printf("冒泡排序后:\n"); for(i=0; i<10; i++) printf("%8d",a[i]); printf("\n"); /*插入排序*/ for(i=1; i<10; i++) { temp=a[i]; j=i-1; while(j>=0&&a[j]>temp) { a[j+1]=a[j]; j--; } a[j+1]=temp; } printf("插入排序后:\n"); for(i=0; i<10; i++) printf("%8d",a[i]); printf("\n"); /*选择排序*/ /*for(i=0;i<10;i++) { int min; min=a[i]; for(j=i+1;j<10;j++) { if(a[j]<min) { min=a[j]; temp=a[j]; a[j]=a[i]; a[i]=temp; } } }*/ for(i=0; i<10; i++) { int k; k=i; for(j=i+1; j<10; j++) { if(a[j]<a[k]) { k=j; } }
if(i!=k){
temp=a[i];
a[i] = a[k];
a[k]=temp;
}
} printf("选择排序后:\n"); for(i=0; i<10; i++) printf("%8d",a[i]); printf("\n"); /*希尔排序*/ for(d=10/2; d>=1; d=d/2) { for(i=d; i<10; i++) { temp=a[i]; j=i-d; while(j>=0&&a[j]>temp) { a[j+d]=a[j]; j=j-d; } a[j+d]=temp; } } printf("希尔排序后:\n"); for(i=0; i<10; i++) printf("%8d",a[i]); printf("\n"); } /*堆排序*/ #include "stdio.h" #include "string.h" void HeapAdjust(int R[],int s,int m) { int t,j; t=R[s]; for(j=2*s+1; j<=m; j=j*2+1) { if(j<m&&R[j]<R[j+1]) ++j; if(!(t<R[j])) break; R[s]=R[j]; s=j; } R[s]=t; } void HeapSort(int R[],int n) { int i,temp; for(i=n/2-1; i>=0; --i) //建立初始堆,初始堆的时候要依次调整第n/2-1到第0个节点。 HeapAdjust(R,i,n-1); for(i=n-1; i>0; i--) { temp=R[0]; R[0]=R[i]; R[i]=temp; HeapAdjust(R,0,i-1);//重建堆的时候只要调整第0个节点就可以了。 } } void main() { int i; int R[]= {3,12,4,1,9,8,6,5,23,9,90,87,65,456,2,95}; HeapSort(R,16); for(i=0; i<16; i++) printf("%d\t",R[i]); }