数据结构——排序

//冒泡排序
#include 
using namespace std;
typedef struct
{
    int key;
	char *otherinfo;
}ElemType;
//顺序表的存储结构
typedef struct
{
    ElemType *r;	         						//存储空间的基地址
    int  length;            						//顺序表长度
}SqList;											//顺序表类型
void BubbleSort(SqList &L)
{
	//对顺序表L做冒泡排序
	int m,j,flag;
	ElemType t;
    m=L.length-1; flag=1; 				//flag用来标记某一趟排序是否发生交换
    while((m>0)&&(flag==1))
	{
		flag=0;           				//flag置为0,如果本趟排序没有发生交换,则不会执行下一趟排序
        for(j=1;j<=m;j++)
			if(L.r[j].key>L.r[j+1].key)
			{
				flag=1;					//flag置为1,表示本趟排序发生了交换
				t=L.r[j];L.r[j]=L.r[j+1];L.r[j+1]=t;	//交换前后两个记录
			}							//if
		--m;
    }									//while
}										//BubbleSort
void Create_Sq(SqList &L)
{
	int i=1,n;
	cin>>n;
	while(n)
	{
		L.r[i++].key=n;
		cin>>n;
		L.length++;
	}
}

void show(SqList L)
{
	int i;
	for(i=1;i<=L.length;i++)
		cout<
using namespace std;
#define  MAXSIZE  20              					//顺序表的最大长度
typedef struct
{
	int key;
	char *otherinfo;
}ElemType;                      
typedef struct
{
    ElemType *r;	         						//存储空间的基地址
    int  length;            						//顺序表长度
}SqList;											//顺序表类型
void InsertSort(SqList &L)
{
   //对顺序表L做直接插入排序
	int i,j;
	for(i=2;i<=L.length;++i)
		if(L.r[i].key>n;											//输入个数
    while(n)
	{
		L.r[i++].key=n;
		L.length++;
        cin>>n;
	}
}
void show(SqList L)
{
	int i;
	for(i=1;i<=L.length;i++)
		cout<
using namespace std;
#define  MAXSIZE  20              					//顺序表的最大长度
typedef struct
{
	int key;
	char *otherinfo;
}ElemType;
//顺序表的存储结构
typedef struct
{
    ElemType *r;	         						//存储空间的基地址
    int  length;            						//顺序表长度
}SqList;											//顺序表类型

void SelectSort(SqList &L)
{
   //对顺序表L做简单选择排序
	int i,j,k;
	ElemType t;
    for(i=1;i>n;
	while(n)
	{
		L.r[i++].key=n;
		cin>>n;
		L.length++;
	}
}
void show(SqList L)
{
	int i;
	for(i=1;i<=L.length;i++)
		cout<
using namespace std;
#define  MAXSIZE  20              		//顺序表的最大长度
typedef struct
{
	int key;
	char *otherinfo;
}ElemType;
//顺序表的存储结构
typedef struct
{
    ElemType *r;	         						//存储空间的基地址
    int  length;            						//顺序表长度
}SqList;											//顺序表类型

void ShellInsert(SqList &L,int dk)
{
	//对顺序表L做一趟增量是dk的希尔插入排序
	int i,j;
	for(i=dk+1;i<=L.length;++i)
		if(L.r[i].key0&& L.r[0].key>n;
	while(n)
	{
		L.r[i++].key=n;
		cin>>n;
		L.length++;
	}
}
int show(SqList L)
{
	int i;
	for(i=1;i<=L.length;i++)
		cout<
using namespace std;
typedef struct
{
    int key;
    char *otherinfo;
}ElemType;
//顺序表的存储结构
typedef struct
{
    ElemType *r;	         						//存储空间的基地址
    int  length;            						//顺序表长度
}SqList;											//顺序表类型
int Partition(SqList &L,int low,int high)
{ 
	int pivotkey;
	L.r[0]=L.r[low];                    	//用子表的第一个记录做枢轴记录
	pivotkey=L.r[low].key;		   			//枢轴记录关键字保存在pivotkey中
	while(low=pivotkey) --high;
		L.r[low]=L.r[high];					//将比枢轴记录小的记录移到低端
		while(low>n;
	while(n)
	{
		L.r[i++].key=n;
		cin>>n;
		L.length++;
	}
}

void show(SqList L)
{
	int i;
	for(i=1;i<=L.length;i++)
		cout<
using namespace std;
#define  MAXSIZE  20              					//顺序表的最大长度
typedef struct
{
	int key;
}ElemType;
//顺序表的存储结构
typedef struct
{
    ElemType *r;	         						//存储空间的基地址
    int  length;            						//顺序表长度
}SqList;											//顺序表类型
//筛选法调整堆
void HeapAdjust(SqList &L,int s,int m)
{
   //假设r[s+1..m]已经是堆,将r[s..m]调整为以r[s]为根的大根堆
	ElemType rc;
	int j;
	rc=L.r[s];
    for(j=2*s;j<=m;j*=2)
	{												//沿key较大的孩子结点向下筛选
		if(j=L.r[j].key) break;      			//rc应插入在位置s上
		L.r[s]=L.r[j]; s=j;
    }
	L.r[s]=rc;                          			//插入
}
void Create_Sq(SqList &L)
{
	int i=1,n;
	cin>>n;
	while(n)
	{
		L.r[i++].key=n;
		cin>>n;
		L.length++;
	}
}
//建初堆
void CreatHeap(SqList &L)
{
	int i,n;
	n=L.length;
	for(i=n/2;i>0;--i)
		HeapAdjust(L,i,n);
}
void HeapSort(SqList &L)
{
	//对顺序表L进行堆排序
	int i;
	ElemType x;
	CreatHeap(L);              					//把无序序列L.r[1..L.length]建成大根堆
	for(i=L.length;i>1;--i)
	{
		x=L.r[1];               				//将堆顶记录和当前未经排序子序列L.r[1..i]中最后一个记录互换
		L.r[1]=L.r[i];
		L.r[i]=x;
		HeapAdjust(L,1,i-1);					//将L.r[1..i-1]重新调整为大根堆
   }
}
void show(SqList L)
{
	int i;
	for(i=1;i<=L.length;i++)
		cout<

你可能感兴趣的:(数据结构)