很早以 前在C论坛上发的
http://bbs.bc-cn.net/bbs/dispbbs.asp?BoardID=5&ID=15610
七种排序算法
堆排序
#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>
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]);
}
---------------------------------------------
快速排序
#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,n,a[100],flag=1;
printf("请问你要输入几个排序数:\n");
scanf("%d",&n);
printf("请输入你要排序的数值:\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n&&flag==1;i++)
{ flag=0;
for(j=1;j<n-i;j++)
if(a[j]<a[j-1])
{ flag=1;
temp=a[j-1];
a[j-1]=a[j];
a[j]=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>
main()
{int a[100], min,i,k,temp,j,cout;
printf("请问你要输入几个数字(不要超过100个!!):\n");
scanf("%d",&cout);
printf("请输入数字:\n");
for(i=0;i<cout;i++)
scanf("%d",&a[i]);
for(i=0;i<cout;i++)
{
min=i;
for(k=i+1;k<cout;k++)
{
if(a[min]>a[k])
{
min=k;
}
}if(i!=min)
{
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
}
for(j=0;j<cout;j++)
printf("%d\t",a[j]);
}
------------------------------------------
直接插入
#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]);
}
还有个二路归并排序我不会.我过下就热情发上来给大家
我在数据结构论坛发了这7种排序。但是那边我全部附有抓图的.如果想去看看结果的.就去那边看看好了。
坚强依然!永不言苦!永不言败!睇透数据结构!编程编程再编程!-----------激情依旧