准备数据结构上级考试时的练习代码,置于此以备后用!
#include<stdio.h> #define MAX 100 //插入排序 void insertSort(int* array,int n) { int i,j,temp; for(i=1;i<n;i++) { //获取当前要进行排序的元素array[i] temp=array[i]; //比较已排序区的数据与当前要进行排序的数据,如果当前排序的元素较小, //则后移已排序的元素,找到其合适的位置后插入 for(j=i;j>0&&temp<array[j-1];j--) { array[j]=array[j-1]; array[j-1]=temp; } printf("第%d趟排序:",i); printArray(array,n); } } //希尔排序 void shellSort(int* array,int n) { int i,j,temp; int gap=0; //根据n大小,确定首次排序的分组间隔大小 while(gap<=n) { gap=gap*3+1; } printf("元素总数为:%d,首次分组间隔gap=%d\n",n,gap); //当分组间隔大于0时,对各分组的元素进行组内排序 while(gap>0) { printf("分组间隔gap=%d\n",gap); //对组内元素进行直接插入排序 for(i=gap;i<n;i++) { //获取下一个要进行排序的组内元素索引 j=i-gap; temp=array[i]; while((j>=0)&&(array[j]>temp)) { //将a[j]这一元素移动到组内的下一位置 array[j+gap]=array[j]; j=j-gap;//下一个组内元素的索引 } array[j+gap]=temp; } gap=(gap-1)/3;//获取下一个分组间隔 } printArray(array,n); } //冒泡排序 void bobbleSort(int* array,int n) { int i,j,tmp; for(i=0;i<n;i++) { for(j=i;j<n;j++) { if(array[i]>array[j]) { tmp=array[i]; array[i]=array[j]; array[j]=tmp; } } } printArray(array,n); } void printArray(int* array,int n) { int i; for(i=0;i<n;i++) { printf("%d \t",array[i]); } printf("\n"); } void main() { int array[MAX]; int i,len=0; int tmpnum; for(i=0;i<MAX;i++) { array[i]=0; } printf("please input the number for sort,end with -1\n"); do { scanf("%d",&tmpnum); if(tmpnum!=-1) { array[len]=tmpnum; len++; } } while(tmpnum!=-1); printArray(array,len); //printf("冒泡排序\n"); //bobbleSort(array,len); //printf("直接插入排序\n"); //insertSort(array,len); printf("希尔排序\n"); shellSort (array,len); }