sort
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<time.h> 4 struct SortObject{ 5 int n; 6 int * record; 7 }; 8 typedef struct SortObject * Array; 9 10 void insertSort(Array a){ 11 int i,j; 12 int temp; 13 for(i=1;i<a->n;++i){ 14 temp=a->record[i]; 15 for(j=i-1;temp<a->record[j]&&j>=0;j--){ 16 a->record[j+1]=a->record[j]; 17 } 18 if(j!=i-1){ 19 a->record[j+1]=temp; 20 } 21 } 22 } 23 void shellSort(Array a,int d){ 24 int i,j,inc; 25 int temp; 26 for(inc=d;inc>0;inc/=2){ 27 for(i=inc;i<a->n;i++){ 28 temp=a->record[i]; 29 for(j=i-inc;j>=0&&temp<a->record[j];j-=inc){ 30 a->record[j+inc]=a->record[j]; 31 } 32 a->record[j+inc]=temp; 33 } 34 } 35 } 36 void selectSort(Array a){ 37 int i,j,k; 38 int temp; 39 for(i=0;i<a->n-1;i++){ 40 k=i; 41 for(j=i+1;j<a->n;j++){ 42 if(a->record[j]<a->record[k]){ 43 k=j; 44 } 45 } 46 if(k!=i){ 47 temp=a->record[i]; 48 a->record[i]=a->record[k]; 49 a->record[k]=temp; 50 } 51 } 52 } 53 void bubbleSort(Array a){ 54 int i,j,noswap; 55 int temp; 56 for(i=0;i<a->n-1;i++){ 57 noswap=1; 58 for(j=0;j<a->n-i-1;j++){ 59 if(a->record[j+1]<a->record[j]){ 60 temp=a->record[j]; 61 a->record[j]=a->record[j+1]; 62 a->record[j+1]=temp; 63 noswap=0; 64 } 65 } 66 if(noswap){ 67 break; 68 } 69 } 70 } 71 void quickSort(Array a,int l,int r){ 72 int i,j; 73 int temp; 74 if(l>=r)return; 75 i=l;j=r;temp=a->record[i]; 76 while(i!=j){ 77 while(i<j&&a->record[j]>=temp){ 78 j--; 79 } 80 if(i<j){ 81 a->record[i++]=a->record[j]; 82 } 83 while(i<j&&a->record[i]<=temp){ 84 i++; 85 } 86 if(i<j){ 87 a->record[j--]=a->record[i]; 88 } 89 } 90 a->record[i]=temp; 91 quickSort(a,l,i-1); 92 quickSort(a,i+1,r); 93 } 94 void sift(Array a,int size,int p){ 95 int temp=a->record[p]; 96 int child=2*p+1; 97 while(child<size){ 98 if((child<size-1)&&(a->record[child]<a->record[child+1])){ 99 child++; 100 } 101 if(temp<a->record[child]){ 102 a->record[p]=a->record[child]; 103 p=child;child=2*p+1; 104 } 105 else{ 106 break; 107 } 108 } 109 a->record[p]=temp; 110 } 111 void heapSort(Array a){ 112 int i,n; 113 int temp; 114 n=a->n; 115 for(i=n/2;i>=0;i--){ 116 sift(a,n,i); 117 } 118 for(i=n-1;i>0;i--){ 119 temp=a->record[0]; 120 a->record[0]=a->record[i]; 121 a->record[i]=temp; 122 sift(a,i,0); 123 } 124 } 125 void buildArray(Array a){ 126 int i; 127 for(i=0;i<a->n;i++){ 128 a->record[i]=rand()%100+1; 129 printf("%d,",a->record[i]); 130 } 131 printf("\n"); 132 } 133 void printArray(Array a){ 134 int i; 135 for(i=0;i<a->n;i++){ 136 printf("%d,",a->record[i]); 137 } 138 printf("\n"); 139 printf("\n"); 140 } 141 142 int main(){ 143 Array a=(Array)malloc(sizeof(struct SortObject)); 144 a->n=8; 145 if(a!=NULL){ 146 a->record=(int *)malloc(sizeof(int)*a->n); 147 } 148 else{ 149 printf("out of space"); 150 } 151 srand(time(NULL)); 152 printf("1.directInsertSort:\n"); 153 buildArray(a); 154 insertSort(a); 155 printArray(a); 156 printf("2.shellSort:\n"); 157 buildArray(a); 158 shellSort(a,a->n/2); 159 printArray(a); 160 printf("3.simpleSelectSort:\n"); 161 buildArray(a); 162 selectSort(a); 163 printArray(a); 164 printf("4.bubbleSort:\n"); 165 buildArray(a); 166 bubbleSort(a); 167 printArray(a); 168 printf("5.quickSort:\n"); 169 buildArray(a); 170 quickSort(a,0,a->n-1); 171 printArray(a); 172 printf("6.heapSort:\n"); 173 buildArray(a); 174 heapSort(a); 175 printArray(a); 176 return 0; 177 }