既然选择了远方,便只顾风雨兼程。
#include<iostream>
using namespace std;
#define MAX 20
typedef int SqList[MAX];
void BubbleSort(SqList &L,int n)//冒泡排序,使用交换
{
for(int i=0;i<n-1;++i)//控制趟数
{
for(int j=0;j<n-i-1;++j)//每一趟相邻两个记录比较,只需进行n-i次即可
{
if(L[j]>L[j+1])//判断
{
int temp=L[j];
L[j]=L[j+1];
L[j+1]=temp;
}
}
}
}
int Partition(SqList &L,int low,int high)//使用赋值
{
//交换顺序表L中子表L[low,high]的记录,枢轴记录到位,并返回其所在位置
//此时,在它前(后)的记录均不大(小)于它
int key=L[low];
while(low<high)
{
while(low<high && L[high]>=key)//右边大于枢轴
{
high--;//向左比较
}
L[low]=L[high];//若不满足,则赋值
while(low<high && L[low]<=key)//左边小于枢轴
{
low++;//向右比较
}
L[high]=L[low];//若不满足,则赋值
}
L[low]=key;
return low;
}
void QuickSort(SqList &L,int low,int high)//快速排序,使用递归形式
{
if(low<high)//长度大于1
{
int pivotloc=Partition(L,low,high);//一分为二
QuickSort(L,low,pivotloc-1);//对低子表递归排序,pivotloc是枢轴
QuickSort(L,pivotloc+1,high);//对高子表递归排序
}
}
int SelectMinKey(SqList &L,int n ,int key) //选择第key小的下标
{
for(int k = key+1;k < n;++k) //只比较key之后的
{
if(L[k] < L[key]) //若小于则记录下标
{
key = k;
}
}
return key; //返回下标
}
void SelectSort(SqList &L,int n)//简单选择排序
{
for(int i=1;i<n-1;++i)
{
int j=SelectMinKey(L,n,i);
if(i!=j)
{
int temp=L[i];
L[i]=L[j];
L[j]=temp;
}
}
}
void main()
{
SqList sq={0,49,38,65,97,76,13,27,49};
for(int i=1;i<9;++i)
{
cout<<sq[i]<<" ";
}
cout<<endl;
SqList sq2={49,38,65,97,76,13,27,49};
for(i=0;i<8;++i)
{
cout<<sq2[i]<<" ";
}
cout<<endl;
BubbleSort(sq2,8);
for(i=0;i<8;++i)
{
cout<<sq2[i]<<" ";
}
cout<<endl;
QuickSort(sq2,0,7);
for(i=0;i<8;++i)
{
cout<<sq2[i]<<" ";
}
cout<<endl;
SelectSort(sq2,8);
for(i=0;i<8;++i)
{
cout<<sq2[i]<<" ";
}
cout<<endl;
}