各种排序算法实现(冒泡排序/快速排序/ 直接选择排序/堆排序/归并排序)
#include <stdio.h>
#include <stdlib.h>
#define Max 100
typedef struct
{
int key;
}RecType;
typedef RecType SeqList[Max+1];
int n;
void InsertSort(SeqList R)
{
int i,j;
for(i=2;i<=n;i++)
if(R[i].key<R[i-1].key)
{
R[0]=R[i];j=j-1;
do
{
R[j+1]=R[j];
j--;
}while(R[0].key<R[j].key);
R[j+1]=R[0];
}//endif
}
//冒泡排序
typedef enum{FALSE,TURE}Boolean;
void BubbleSort(SeqList R)
{
int i,j;
Boolean exchange;
for(i=1;i<n;i++)
{
exchange=FALSE;
for(j=n-1;j>=i;j--)
if(R[j+1].key<R[j].key)
{
R[0]=R[j+1];
R[j+1]=R[j];
R[j]=R[0];
exchange=TRUE;
}
if(!exchange)
return;
}
}
int Partition(SeqList R,int i,int j)
{
RecType pivot=R[i];
while(i<j)
{
while(i<j&&R[j].key>=pivot.key)
j--;
if(i<j)R[i++]=R[j];
while(i<j&&R[i].key<=pivot.key)
i++;
if(i<j) R[j--]=R[i];
}
R[i]=pivot;
return i;
}
void QuickSort(SeqList R,int low,int high)
{
int pivotops;
if(low<high)
{
pivotops=Partition(SeqList R,int low,int high);
QuickSort(R,low,pivotpos-1);
QuickSort(R,pivotops+1,high);
}
}//快速排序
void SelectSort(SeqList R,int low,int high)
{
int large;
RecType temp=R[low];
for(large=2*low;large<=high;large*=2)
{
if(large<high&&R[large].key<R[large+1.key])
large++;
if(temp.key>=R[large].key)
break;
R[low]=R[large];
low=large;
}
R[low]=temp;
}
void BuildHeap(SeqList R)
{
int i;
for(i=n/2;i>0;i--)
Heapify(R,i,n);
}
void HeapSort(SeqList R)
{
int i;
BuildHeap(R);
for(i=n;i>1;i--)
{
R[0]=R[1];R[1]=R[i];R[i]=R[0];
Heapify(R,1,i-1)
}
}
void Merge(SeqList R,int Low,int m,int heigh)
{
int i=low,j=m+1;p=0;
Rectype *R1;
R1=(RecType*)malloc((high-low+1)*sizeof(RecType));
while(i<m&&j<=high)
R1[p++]=(R[i].key<=R[j].key)?R[i++];R[j++];
while(i<=m)
R1[p++]=R[i++];
while(j<=high)
R1[p++]=R[j++];
for(p=0,i=low;i<=high;p++,i++)
R[i]=R1[p];
for(p=0,i=low;i<=high;p++,i++)
R[i]=R1[p];
}
void MergePass(SeqList R,int length)
{
int i;
for(i=1;i+2*length-1<=n;i=i+2*length)
Merge(R,i,,i+length-1,n)
}
void MergeSort(SeqList R)
{
int length;
for(length=1;length<n;length*=2)
Mergepass(R,length);
}
void input_int(SeqList R)
{
int i;
printf("please input num(int ):");
scanf("%d",&n);
printf("Please input %d integer:",n);
for(i=1;i<=n;i++)
scanf("%d",&R[i].key);
}
//输出链表
void output_int (SeqLiist R)
{
int i;
for(i=1;i<=n;i++)
printf("%4d",R[i].key);
}
//主函数
void main()
{
int i;
SeqList R;
intput_int(R);
printf("\t******Select******\n");
printf("\t1:Insert Sort\n");
printf("\t2:Bubble Sort\n");
printf("\t3:Quick Sort\n");
printf("\t4:Straight Selection Sort\n");
printf("\t5:Heap Sort\n");
printf("\t6:Merge Sort\n");
printf("\t7:Exit\n");
printf("\t************************\n");
scanf("%d",&i);
switch("%d",&i);
switch(i)
{
case 1:InsertSort(R);break;
case 2:Bubble Sort(R);break;
case 3:Quick Sort(R,1,n);break;
case 4:Straight Selection Sort(R);break;
case 5:Heap Sort(R);break;
case 6:Merge Sort(R);break;
case 7:exit(0);
}
printf("Sort reult:");
output_int(R);
}