#include<iostream>
#define MAX 1000
using namespace std;
//简单插入排序
void InsertSort(int a[],int len)
{
for(int i=1;i<len;i++)
{
int j;
int temp;
for(j=i-1;(j>=0)&&(a[j]>a[i]);j--)
;
temp=a[i];
for(int k=i-1;k>j;k--)
a[k+1]=a[k];
a[j+1]=temp;
}
for(int i=0;i<len;i++)
cout<<a[i]<<" ";
cout<<endl;
}
//折半插入排序
void BInsertSort(int a[],int len)
{
for(int i=1;i<len;i++)
{
int low=0;
int high=i-1;
int m;
while(low<=high)
{
m=(low+high)/2;
if(a[m]>a[i])
high=m-1;
else
low=m+1;
}
int temp=a[i];
for(int k=i-1;k>high;k--)
a[k+1]=a[k];
a[high+1]=temp;
}
for(int i=0;i<len;i++)
cout<<a[i]<<" ";
cout<<endl;
}
//冒泡排序
void BubbleSort(int a[],int len)
{
for(int i=0;i<len;i++)
{
int flag=false;
for(int j=0;j<len-1-i;j++)
if(a[j]>a[j+1])
{
int temp;
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
flag=true;
}
if(!flag)
break;
}
for(int i=0;i<len;i++)
cout<<a[i]<<" ";
cout<<endl;
}
//快速排序
void QuickSort(int a[],int low,int high)
{
if(low>=high)
return;
int l=low;
int r=high;
int m=a[(low+high)/2];
while(l<r)
{
while(a[l]<m)
l++;
while(m<a[r])
r--;
if(l<=r)
{
int temp;
temp=a[l];
a[l]=a[r];
a[r]=temp;
l++;
r--;
}
}
if(l<high)
QuickSort(a,l,high);
if(r>low)
QuickSort(a,low,r);
}
//选择排序
void SelectSort(int a[],int len)
{
for(int i=0;i<len;i++)
{
int minIndex=i;
for(int j=i+1;j<len;j++)
{
if(a[j]<a[minIndex])
minIndex=j;
}
if(i!=minIndex)
{
int temp;
temp=a[i];
a[i]=a[minIndex];
a[minIndex]=temp;
}
}
}
void main()
{
while(true)
{
int a[MAX];
cout<<"请输入待排序的数组的长度:"<<endl;
int len;
cin>>len;
cout<<"请输入数据:"<<endl;
for(int i=0;i<len;i++)
cin>>a[i];
/*InsertSort(a,len);*/
/*BInsertSort(a,len);*/
/*BubbleSort(a,len);*/
/*QuickSort(a,0,len-1);*/
SelectSort(a,len);
for(int i=0;i<len;i++)
cout<<a[i]<<" ";
cout<<endl;
}
}