还有三个排序算法真心不会编了啊~~~求大神。。。
关于堆排序,归并排序,继续排序从前面四个排序大神肯定能看清我的思路。。。求补充啊求补充~~~
就是这种形式
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
void pr(int a[],int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
void mp()//冒泡排序法
{
int a[100]={0},i=0,n=0,j,t;
printf("请输入需要排序的数组,按回车键确认:");
do
{
scanf("%d",&a[i]);
i++;
n++;
}while(getchar()!='\n');
for(i=0;i<=n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
pr(a,n);
}
}
}
printf("Press any key to continue");
getchar();
}
void quick(int a[],int n,int left,int right)
{
int i,j,t;
if(left<right){
i=left;j=right+1;
while(1){
while(i+1<n&&a[++i]<a[left]);
while(j-1>-1&&a[--j]>a[left]);
if(i>=j)break;
t=a[i],a[i]=a[j],a[j]=t;
}
t=a[left],a[left]=a[j],a[j]=t;
pr(a,n);
quick(a,n,left,j-1);
quick(a,n,j+1,right);
}
}
void ks()
{
int a[100]={0},i=0,n=0;
printf("请输入需要排序的数组,按回车键确认:");
do
{
scanf("%d",&a[i]);
i++;
n++;
}while(getchar()!='\n');
quick(a,n,0,n-1);
printf("Press any key to continue");
getchar();
}
void insert(int a[],int n)
{
int i,k,t;
for(i=1;i<n;i++)
{
t=a[i],k=i-1;
while(t<a[k])
{
a[k+1]=a[k],k--;
if(k==-1)break;
}
a[k+1]=t;
pr(a,n);
}
}
void cr()//插入排序法
{
int a[100]={0},i=0,n=0,j,t,k;
printf("请输入需要排序的数组,按回车键确认:");
do
{
scanf("%d",&a[i]);
i++;
n++;
}while(getchar()!='\n');
insert(a,n);
printf("Press any key to continue");
getchar();
}
void select(int a[],int n)
{
int i,j,k,t;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(a[j]<a[k])
{
k=j;
}
if(i!=k)
{
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
pr(a,n);
}
}
void xz()//选择排序法
{
int a[100]={0},i=0,n=0,j,t,k;
printf("请输入需要排序的数组,按回车键确认:");
do
{
scanf("%d",&a[i]);
i++;
n++;
}while(getchar()!='\n');
//count<<endl;
select(a,n);
printf("Press any key to continue");
getchar();
}
void d()
{
int a[100]={0},i=0,n=0,j,t;
printf("请输入需要排序的数组,按回车键确认:");
do
{
scanf("%d",&a[i]);
i++;
n++;
}while(getchar()!='\n');
printf("Press any key to continue");
getchar();
}
void js()
{
int a[100]={0},i=0,n=0,j,t;
printf("请输入需要排序的数组,按回车键确认:");
do
{
scanf("%d",&a[i]);
i++;
n++;
}while(getchar()!='\n');
printf("Press any key to continue");
getchar();
}
void gb()
{
int a[100]={0},i=0,n=0,j,t;
printf("请输入需要排序的数组,按回车键确认:");
do
{
scanf("%d",&a[i]);
i++;
n++;
}while(getchar()!='\n');
printf("Press any key to continue");
getchar();
}
void main()
{
int i=0,n=0,a[100]={0},x;
while(1)
{
system("cls");//选择排序方式
printf("请选择排序方式\n");
loop: printf("1.快速排序\n");
printf("2.插入排序\n");
printf("3.选择排序\n");
printf("4.冒泡排序\n");
printf("5.堆排序\n");
printf("6.归并排序\n");
printf("7.基数排序\n");
printf("8.结束程序\n您选择的是:");
scanf("%d",&x);
if(x==1)
{
ks();
}
if(x==2)
{
cr();
}
if(x==3)
{
xz();
}
if(x==4)
{
mp();
}
if(x==5)
{
d();
}
if(x==6)
{
gb();
}
if(x==7)
{
js();
}
if(x==8)
{
printf("8.结束程序,程序将终止\n再见!\n");break;
}
if(x!=1&&x!=2&&x!=3&&x!=4&&x!=5&&x!=6&&x!=7&&x!=8)
{
system("cls");
printf("选择错误,请重新输入!\n");goto loop;
}
}
}
[ 本帖最后由 leemingyaa 于 2012-6-22 15:44 编辑 ]