双向起泡排序
双向起泡排序:
#include
#include
#include
//顺序表结构类型定义
typedef int datatype; typedef struct{
int key;
datatype data;
}sequenlist;
void create(sequenlist[],int);
void print(sequenlist[],int);
void dbubblesort(sequenlist[],int);
void main()
{
const int n=10;
sequenlist r[n+1];
create(r,n);
printf("排序前的数据:");
print(r,n);
dbubblesort(r,n);
printf("排序后的数据:");
print(r,n);
}
//建立顺序表
void create(sequenlist r[],int n)
{
srand(time(0));
for(int i=1;i<=n;i++)
r[i].key=rand()%90; }
//输出顺序表
void print(sequenlist r[],int n)
{
for(int i=1;i<=n;i++)
printf("%5d",r[i].key);
printf("\n");
}
//添加双向起泡排序算法
void dbubblesort(sequenlist r[],int n){
int i,tms=0;
int low=1,high=n;
int bestj;
int temp1,temp2;
while (low=high)
break;
bestj=-1;
for (i=low;i<=high;i++)
if (bestj==-1 || r[i].key>r[bestj].key)
bestj=i;
//交换r[bestj].key和r[high].key
temp2=r[bestj].key;
r[bestj].key=r[high].key;
r[high].key=temp2;
high--;
printf("times: %d",++tms); print(r,n);
}
}