/*
Copyright (c)2016,烟台大学计算机与控制工程学院
All rights reserved.
文件名称:项目一之各种排序.cpp
作 者:李潇
完成日期:2016年12月18日
版 本 号:v1.0
问题描述:请用各种排序算法完成序列{57,40,38,11,13,34,48,75,6,19,9,7}的排序。
输入描述:无
程序输出: 几种排序前、排序后的数组。
*/
代码:
#include <stdio.h>
#define maxsize 12
typedef int KeyType;
typedef int InfoType;
typedef struct
{
KeyType key;
InfoType data;
}RecType;
void Bubblesort(RecType R[],int n)//冒泡排序
{
int i,j;
bool exchange;
RecType tmp;
for(i=0;i<n-1;i++)
{
exchange=false;
for(j=n-1;j>i;j--)
if(R[j].key<R[j-1].key)
{
tmp=R[j];
R[j]=R[j-1];
R[j-1]=tmp;
exchange=true;
}
if(!exchange)
{
printf("冒泡排序后的数组:\n");
for(i=0;i<n;i++)
printf("%d ",R[i].key);
printf("\n");
return;
}
}
}
void QuickSort(RecType R[],int s,int t) //快速排序
{
int i=s,j=t;
RecType tmp;
if(s<t)
{
tmp=R[s];
while(i!=j)
{
while(j>i && R[j].key>=tmp.key)
j--;
R[i]=R[j];
while(i<j && R[i].key<=tmp.key)
i++;
R[j]=R[i];
}
R[i]=tmp;
QuickSort(R,s,i-1);
QuickSort(R,i+1,t);
}
}
void SelectSort(RecType R[],int n)//直接选择排序
{
int i,j,k;
RecType tmp;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(R[j].key<R[k].key)
k=j;
if(k!=i)
{
tmp=R[i];
R[i]=R[k];
R[k]=tmp;
}
}
printf("直接选择排序后的数组:\n");
for(i=0;i<n;i++)
printf("%d ",R[i].key);
printf("\n");
}
int main()
{
RecType r[maxsize];
KeyType a[]={57,40,38,11,13,34,48,75,6,19,9,7};
int i;
for(i=0;i<maxsize;i++)
r[i].key=a[i];
printf("输出排序前的数组:\n") ;
for(i=0;i<maxsize;i++)
printf("%d ",r[i].key);
printf("\n");
QuickSort(r,0,maxsize-1);
printf("快速排序后的数组:\n");
for(i=0;i<maxsize;i++)
printf("%d ",r[i].key);
printf("\n");
Bubblesort(r,maxsize);
SelectSort(r,maxsize);
return 0;
}
运行结果;
心得体会:
在这里需注意冒泡排序的地方,这里用的是改进版的冒泡排序,需要注意它的return; 这句话。