<pre name="code" class="cpp"><span style="font-size:18px;">#include <iostream>
#include <time.h>
#include <algorithm>
using namespace std;
void BubbleSort(int a[],int len)
{
int tag=0;
int count=0;
for(int i=0;i<len;i++)//n趟
{
tag=0;
for(int j=len-1;j>i;j--)
{
if(a[j]<a[j-1])
{
int tmp=a[j];
a[j]=a[j-1];
a[j-1]=tmp;
tag=1;
}
}
if(tag==0)
break;
//cout<<++count<<endl;
}
}
//按照定义写,比较麻烦
void InsertSort(int a[],int len)
{
for(int i=1;i<len;i++)
{
int j=i-1;
while(j>=0)
{
if(a[i]>a[j])
break;
else
j--;
}
if(j!=i-1)
{
int k=i;
int tmp=a[i];
for(k=i;k>j;k--)
{
a[k]=a[k-1];
}
a[j+1]=tmp;
}
}
}
//改进一点
void InsertSort1(int a[],int len)
{
for(int i=1;i<len;i++)
{
int j=i-1;
int tmp=a[i];
while(tmp<a[j] && j>=0)
{
a[j+1]=a[j];
j--;
}
a[j+1]=tmp;
}
}
void ShellSort(int a[],int len)
{
int gap=len/2;
for(gap=len/2;gap>0;gap=gap/2)
{
for(int i=0;i<gap;i++)//按组,共有gap组
{
for(int j=i+gap;j<len/gap;j=j+gap)//对每一组插入排序
{
int k=j-gap;
//1、找到要插入的点
while(k>=i)
{
if(a[j]>a[k])
break;
else
k=k-gap;
}
//2、插入
if(k!=j-gap)
{
int tmp=a[j];
for(int t=j;t>k;t=t-gap)
{
a[t]=a[t-gap];
}
a[k+gap]=tmp;
}
}
}
}
}
void ShellSort1(int a[],int len)
{
int gap;
for(gap=len/2;gap>0;gap=gap/2)
{
for(int k=0;k<gap;k++)//共有gap个组
{
for(int i=k+gap;i<len/gap;i=i+gap)
{
int j=i-gap;
int tmp=a[i];
while(tmp<a[j] && j>=k)
{
a[j+gap]=a[j];
j=j-gap;
}
a[j+gap]=tmp;
}
}
}
}
void QuickSort(int a[],int low,int high)
{
if(low<high)//递归终止条件
{
int i,j;
i=low;
j=high;
while(i!=j)
{
if(i<j)//i在前面,抓大放小
{
if(a[i]>a[j])
{
swap(a[i],a[j]);
swap(i,j);
j++;
}
else
{
j--;
}
}
if(i>j)//i在后面,抓小放大
{
if(a[i]<a[j])
{
swap(a[i],a[j]);
swap(i,j);
j--;
}
else
{
j++;
}
}
}
QuickSort(a,low,i-1);
QuickSort(a,i+1,high);
}
}
void SelectSort(int a[],int len)
{
int min=a[0],pos=0;
int i=1,k=0;
for(i=0;i<len;i++)
{
min=a[i];
pos=i;
for(int j=i;j<len;j++)//i-len找最小值
{
if(a[j]<min)
{
min=a[j];
pos=j;
}
}
swap(a[i],a[pos]);
}
}
//将有二个有序数列a[low...mid]和a[mid...high]合并。
void MergeArray(int a[],int low,int mid,int high)
{
int *tmp=new int[high+1];
int i=low,j=mid+1,k=0;
while(i<=mid && j<=high)
{
if(a[i]<a[j])
{
tmp[k++]=a[i++];
}
else
tmp[k++]=a[j++];
}
while(i<=mid)
tmp[k++]=a[i++];
while(j<=high)
tmp[k++]=a[j++];
for(i=0;i<k;i++)
{
a[i+low]=tmp[i];
}
}
void MergeSort(int a[],int low,int high)
{
if(low<high)
{
int mid=(low+high)/2;
MergeSort(a,low,mid);
MergeSort(a,mid+1,high);
MergeArray(a,low,mid,high);
}
}
void main()
{
srand((unsigned)time(0));
int a[100];
for(int i=0;i<100;i++)
{
a[i]=rand()%100;
}
//BubbleSort(a,100);
//InsertSort1(a,100);
//ShellSort1(a,100);
//QuickSort(a,0,99);
//SelectSort(a,100);
MergeSort(a,0,99);
for(int i=0;i<100;i++)
{
if(i%5==0)
cout<<endl;
cout<<a[i]<<' ';
}
system("pause");
}
</span>
排序
最新推荐文章于 2024-05-27 16:46:08 发布