数据结构 shell 快速

来源:互联网 发布:mac玩天涯明月刀 编辑:程序博客网 时间:2024/06/07 09:14
//shell   (插入算法的升级版)
#include "stdio.h"#include "stdlib.h"#include "time.h"#define  MAX 10#define  SWAP(x,y) {int t = x; x= y; y =t;}int n=0;void shell(int [],int);void main(){int number[MAX]={0};int i;int gap;srand(time(NULL));printf("排序前:");for(i = 0;i<MAX;i++){number[i] = rand()%100;printf("%d ",number[i]);}printf("\nshell排序算法:\n");for(gap=MAX/2;gap>0;gap/=2)shell(number,gap);}void shell(int number[],int gap){int i,j,k,t;printf("gap:%d\n",gap);for(i=0+gap;i<MAX;i++){t = number[i];j= i-gap;while(t<number[j]){number[j+gap] = number[j];j-=gap;if(j==-1||j<0)break;}number[j+gap] = t;printf("第%2d次排序:",++n);for(k=0;k<MAX;k++)printf("%d ",number[k]);printf("\n");}printf("\n");}

//快速排序 (三种)


#include "stdio.h"#include "stdlib.h"#include "time.h"#define MAX 10#define SWAP(x,y) {int t=x;x=y;y=t;}int partition(int number[],int ,int);void kssort1(int [],int,int);void kssort2(int [],int,int);void kssort3(int [],int,int);void main(){int number[MAX]={0};int i;srand(time(NULL));printf("排序前:");for (i=0;i<MAX;i++){number[i] = rand()%100;printf("%d ",number[i]);}printf("\n");kssort3(number,0,MAX-1);printf("排序后:");for (i=0;i<MAX;i++){printf("%d ",number[i]);}printf("\n");}void kssort1(int number[],int left,int right){int l = left,r = right;int s;if (left<right){s = number[left];right++;left--;while(1){while(number[++left]<s);while(number[--right]>s);if(left>=right){break;}SWAP(number[left],number[right]);}//SWAP(number[l],number[right]);kssort1(number,l,left-1);kssort1(number,right+1,r);}}void kssort2(int number[],int left,int right){int l = left,r = right;int s;if (left<right){s=number[(left+right)/2];left--;right++;while(1){while(number[++left]<s);//向右找while(number[--right]>s);//向左找if(left>=right)break;SWAP(number[left],number[right]);}kssort2(number,l,left-1);kssort2(number,right+1,r);}}int partition(int number[],int left,int right){int i=left;int j;int s=number[right];for (j=left;j<right;j++){if(number[j]<=s){SWAP(number[i],number[j]);i++;}}SWAP(number[i],number[right]);return i;}void kssort3(int number[],int left,int right){int p;if (left<right){p=partition(number,left,right);kssort3(number,left,p-1);kssort3(number,p+1,right);}}


0 0