您的位置:首页 > 其它

选择排序 直接插入排序 希尔排序 堆排序

2014-07-24 16:58 183 查看
#include<iostream>
using namespace std;
void InsertSort(int num[],int len)//没有哨兵
{
int i,j,temp;
for(i=1;i<len;i++)
{
if(num[i]<num[i-1])
{
temp=num[i];
for(j=i-1;num[j]>temp;j--)
{
num[j+1]=num[j];
}
num[j+1]=temp;
}
}
}
void SelectSort(int num[],int len)
{
int i,j,k;
for(i=0;i<len;i++)
{
k=i;
for(j=i+1;j<len;j++)
{
if(num[k]>num[j])
k=j;
}
if(k!=i);
{
swap(num[i],num[k]);
}
}
}
void HillSort(int num[],int len)
{
int j,k,seg,temp;
for(seg=len/2;seg>0;seg/=2)
{
for(j=seg;j<len;j++)
{
if(num[j]<num[j-seg])
{
temp=num[j];
k=j-seg;
while(k>=0&&num[k]>temp)
{
num[k+seg]=num[k];
k-=seg;
}
num[k+seg]=temp;
}
}
}
}
int main()
{

int num[]={4,2,5,45,6,8,11,1,9,100};
//	InsertSort(num,10);
//	SelectSort(num,10);

HillSort(num,10);

for(int i=0;i<10;i++)
cout<<num[i]<<" ";
cout<<endl;

system("pause");
return 0;
}
#include<iostream>
using namespace std;
void MakeMinHeap(int a[],int n);
void MinHeapFixdown(int a[],int i,int n);
void MinHeapSort(int a[],int n);

void MakeMinHeap(int a[],int n)
{
int i;
for(i=n/2-1;i>=0;i--)
{
MinHeapFixdown(a,i,n);
}
}
void MinHeapFixdown(int a[],int i,int n)
{
int j,temp;
temp=a[i];
j=2*i+1;
while(j<n)
{
if(j+1<n && a[j+1]<a[j])
{
j++;
}
if(a[j]>=temp)
break;
a[i]=a[j];
i=j;
j=2*i+1;
}
a[i]=temp;
}
void MinHeapSort(int a[],int n)
{
int i;
for(i=n-1;i>=1;i--)
{
cout<<a[0]<<" ";
swap(a[i],a[0]);
MinHeapFixdown(a,0,i);
}
cout<<a[0]<<endl;
}
void main()
{
int temp[5]={2,4,12,1,54};
MakeMinHeap(temp,5);
MinHeapSort(temp,5);
system("pause");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: