当前位置: 代码迷 >> C语言 >> 按从大到小排列求助
  详细解决方案

按从大到小排列求助

热度:170   发布时间:2006-06-28 14:26:46.0
//直接插入排序
#include<stdio.h>
main()
{ int i,j,n,temp,a[100];
printf("请问你要输入几个数字:\n");
scanf("%d",&n);
printf("请输入数字:\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n-1;i++)
{ j=i;
temp=a[i+1];
while(temp<a[j]&&j>-1)
{ a[j+1]=a[j];
j--;
}
a[j+1]=temp;
}
printf("排序后的:\n");
for(i=0;i<n;i++)
printf("%d\t",a[i]);
}

----------------解决方案--------------------------------------------------------

//希尔排序
#include<stdio.h>
void ShellSort(int a[],int n,int d[],int numOfD)
{ int i,j,k,m,span,temp;
for(m=0;m<=numOfD;m++)
{ span=d[m];
for(k=0;k<span;k++)
{ for(i=k;i<n-span;i=i+span)
{
temp=a[i+span];
j=i;
while(j>-1&&temp<=a[j])
{ a[j+span]=a[j];
j=j-span;
}
a[j+span]=temp;
}
}
}

}
main()
{int a[100], b[10],n,i,k,j;
printf("请问你要输入几个数字:\n");
scanf("%d",&n);
printf("请输入数字:\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
j=n;
k=0;
do{
j=j/2;
b[k]=j;
k++;
}while(j>0);
ShellSort(a,n,b,k);
printf("排序后的:\n");
for(i=0;i<n;i++)
printf("%d\t",a[i]);
}


----------------解决方案--------------------------------------------------------

//堆排序
#include<stdio.h>
void CreatHeap(int a[],int n,int h)
{ int i,j,flag,temp;
i=h;
j=2*i+1;
temp=a[i];
flag=0;
while(j<n && flag!=1)
{ if(j<n-1 && a[j]<a[j+1]) j++;
if(temp>a[j])
flag=1;
else
{ a[i]=a[j];
i=j;
j=2*i+1;
}
}
a[i]=temp;
}
void InitCreatHeap(int a[],int n)
{ int i;
for(i=(n-1)/2;i>=0;i--)
CreatHeap(a,n,i);
}
void HeapSort(int a[],int n)
{ int i,temp;
InitCreatHeap(a,n);
for(i=n-1;i>0;i--)
{ temp=a[0];
a[0]=a[i];
a[i]=temp;
CreatHeap(a,i,0);
}

}
main()
{ int n,i,a[100];
printf("请问你要输入几个排序数:\n");
scanf("%d",&n);
printf("请输入你要排序的数值:\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
HeapSort(a,n);
printf("排序后的:\n");
for(i=0;i<n;i++)
printf("%d\t",a[i]);
}


----------------解决方案--------------------------------------------------------
//快速排序
#include<stdio.h>
void QuickSort(int a[],int low,int high){
int i=low,j=high;
int temp=a[low];
while(i<j)
{
while(j>i&&temp<=a[j])
j--;
if(j>i)
{
a[i]=a[j];
i++;

}
while(j>i&&a[i]<temp)
i++;
if(j>i)
{
a[j]=a[i];
j--;
}
}
a[i]=temp;
if(low<i) QuickSort(a,low,i-1);
if(i<high)QuickSort(a,j+1,high);
}
main()
{ int a[100];
int high ,low,i,n;
printf("请问你要输入几个数字:\n");
scanf("%d",&n);
printf("请输入数字:\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
low=0;
high=n-1;
QuickSort(a,low,high);
printf("排序后的:\n");
for( i=0;i<n;i++)
printf("%d\t",a[i]);
}

----------------解决方案--------------------------------------------------------
//折半排序
#include<stdio.h>
main()
{ int i,j,temp, low,high,mid,a[100],n;
printf("请问你要输入几个数字:\n");
scanf("%d",&n);
printf("请输入数字:\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=1;i<n;i++)
{ temp=a[i];
low=0;
high=i-1;
while(high>=low)
{ mid=(low+high)/2;
if(temp<a[mid]) high=mid-1;
else
low=mid+1;
}
for(j=i-1;j>=low;j--)
a[j+1]=a[j];
a[low]=temp;
}
printf("排序后的:\n");
for(i=0;i<n;i++)
printf("%d\t",a[i]);
}

----------------解决方案--------------------------------------------------------
当然还有好多种排序方法,像基数排序的.而且每种排序可以用几种思想来实现.
----------------解决方案--------------------------------------------------------
下面是我改,不知道理解你的意思没有,已运行通过
#define P printf
#define S scanf
main( )
{int a[10],i,j,t,max;
P("please input ten integers\n");
for (i=0;i<10;i++)
{S("%d",&a[i]);
}
for (i=0;i<10;i++)
{max=a[i];
for (j=i+1;j<10;j++)
if (a[j]>max) {t=a[j];a[j]=max;max=t;
a[i]=max;
}
}
for (i=0;i<10;i++)
P("%d\n",a[i]);
}
----------------解决方案--------------------------------------------------------
nuciewth的都是一些经典的算法,学数据结构的时候学过一些,不过当时没有怎么写程序,学习一下啊
----------------解决方案--------------------------------------------------------
多谢nuciewth的细心教导。你好强啊,一下子列了这么多方法,我一定好好学习!

[此贴子已经被作者于2006-7-1 9:07:42编辑过]


----------------解决方案--------------------------------------------------------
乱世摸头的也很好。
----------------解决方案--------------------------------------------------------
  相关解决方案