源代码
/************************** 插入,冒泡,选择,快速 排序 ***********************************/
#include<stdio.h>
typedef struct abc
{
int key;
}SeqList;
void insert_sort(SeqList r[],int n);//插入排序
void bubble_sort(SeqList r[],int n);//冒泡排序
void select_sort(SeqList r[],int n);//选择排序
void quick_sort(SeqList r[],int i,int j);//快速排序
int split(SeqList r[],int i,int j);
int main()
{
int i,n;
scanf("%d",&n);
SeqList r[n+1];
for(i=1;i<=n;i++)
scanf("%d",&r[i].key);
//insert_sort(r,n);//插入排序
//bubble_sort(r,n);//冒泡排序
//select_sort(r,n);//选择排序
quick_sort(r,1,n);//快速排序
printf("\n排序结果:");
for(i=1;i<=n;i++)
printf("%d ",r[i].key);
return 0;
}
void quick_sort(SeqList r[],int i,int j)
{
if(i<j)
{
int mid=split(r,i,j);
quick_sort(r,i,mid-1);
quick_sort(r,mid+1,j);
}
}
int split(SeqList r[],int i,int j)
{
r[0]=r[i];
while(i<j)
{
while(i<j && r[j].key>=r[0].key)
j--;
if(i<j)
{
r[i]=r[j];
i++;
}
while(i<j && r[i].key<=r[0].key)
i++;
if(i<j)
{
r[j]=r[i];
j--;
}
}
r[i]=r[0];
return i;
}
void select_sort(SeqList r[],int n)//选择排序
{
int i,j;
for(i=1;i<n;i++)
{
int k=i;
for(j=i+1;j<=n;j++)
{
if(r[j].key<r[k].key)
k=j;
}
if(k!=i)
{
r[0]=r[i];
r[i]=r[k];
r[k]=r[0];
}
}
}
void bubble_sort(SeqList r[],int n)
{
int i,j;
for(i=1;i<n;i++)
{
int flag=0;
for(j=1;j<=n-i;j++)
{
if(r[j].key>r[j+1].key)
{
r[0]=r[j];
r[j]=r[j+1];
r[j+1]=r[0];
flag=1;
}
}
if(flag==0)
break;
}
}
void insert_sort(SeqList r[],int n)
{
int i,j;
for(i=2;i<=n;i++)
{
if(r[i].key<r[i-1].key)
{
r[0]=r[i];
j=i-1;
while(r[j].key>r[0].key)
{
r[j+1]=r[j];
j--;
}
r[j+1]=r[0];
}
}
}
输入数据说明:
初始化时,第一行输入为序列的个数n,第二行为n个无序数序列
测试数据1:
9
1 3 4 8 5 2 9 6 7