您的位置:首页 > 其它

排序

2016-01-04 11:31 239 查看
数据结构编程练习(八)

1 插入排序。

2 希尔排序。

3 冒泡排序。

4 快速排序。

5 直接选择排序。

6 堆排序。

代码实现:
#include "iostream"
using namespace std;
//插入排序
void insert_sort(int A[],int n)
{
for(int i=2;i<n;i++)
{
A[0]=A[i];
int j=i-1;
while(A[j]>A[0])
{
A[j+1]=A[j];
j--;
}
A[j+1]=A[0];
}
}
//希尔排序
void shell_sort(int A[],int n)
{
int dh=n/2,j;
while(dh>=1)
{
for(int i=dh+1;i<n;i++)
{
A[0]=A[i];
j=i-dh;
while(A[j]>A[0])
{
A[j+dh]=A[j];
j=j-dh;
}
A[j+dh]=A[0];
}
dh=dh/2;
}
}
//冒泡排序1
void bubble_sort(int A[],int n)
{
for(int i=1;i<n;i++)
for(int j=n-1;j>=i;j--)
{
if(A[j]<A[i])
{
A[0]=A[j];
A[j]=A[i];
A[i]=A[0];
}
}
}
//冒泡排序2
void dbubble_sort(int A[],int n)
{
int i=1;
bool exchanged;
do
{
exchanged=false;
for(int j=n-1;j>=i;j--)
if(A[j]<A[j-1])
{
A[0]=A[j];
A[j]=A[j-1];
A[j-1]=A[0];
exchanged=true;
}
i++;
}while(i<n-1&&exchanged==true);
}
// 快速排序划分算法
void partition(int A[],int s,int t,int &cutpoint)
{
A[0]=A[s];
int i=s,j=t;
while(i!=j)
{
while(i<j&&A[j]>A[0])
j--;
if(i<j)
{
A[i]=A[j];
i++;
}
while(i<j&&A[i]<A[0])
i++;
if(i<j)
{
A[j]=A[i];
j--;
}
}
A[i]=A[0];
cutpoint=i;
}
//快速排序
void quick_sort(int A[],int n,int s,int t)
{
int i;
if(s<t)
{
partition(A,s,t,i);
quick_sort(A,n,s,i-1);
quick_sort(A,n,i+1,t);
}
}
//直接选择排序
void select_sort(int A[],int n)
{
for(int i=1;i<n-1;i++)
{
int min=i;
for(int j=i+1;j<n;j++)
if(A[j]<A[min])
min=j;
if(min!=i)
{
A[0]=A[min];
A[min]=A[i];
A[i]=A[0];
}
}
}
//堆的建立
void sift(int A[],int k,int n)
{
A[0]=A[k];
bool finished=false;
int i=k,j=2*i;
while(j<n&&finished)
{
if(j<n-1&&A[j]<A[j+1])
j++;
if(A[0]>=A[j])
finished=true;
else
{
A[i]=A[j];
i=j;
j=2*j;
}
}
A[i]=A[0];
}
//堆排序(有问题,解决后订正)
void heap_sort(int A[],int n)
{
for(int i=n/2;i>=1;i--)
sift(A,i,n);
for(int j=n-1;j>=2;j--)
{
A[0]=A[1];
A[1]=A[j];
A[j]=A[0];
sift(A,1,j-1);
}
}
//输出数组
void output(int A[],int n)
{
for(int i=1;i<n;i++)
cout<<A[i]<<" ";
cout<<endl;
}
int main()
{
int A[100],n=1,x;
while(cin>>x&&x>=0)
{
A
=x;
n++;
}
insert_sort(A,n);
output(A,n);
shell_sort(A,n);
output(A,n);
bubble_sort(A,n);
output(A,n);
dbubble_sort(A,n);
output(A,n);
int s=1;
quick_sort(A,n,s,n-1);
output(A,n);
select_sort(A,n);
output(A,n);
heap_sort(A,n);
output(A,n);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: