处理 SSI 文件时出错

C语言的排序算法

     逍遥天子 发表于 2007-2-27 16:03:00

#i nclude "stdio.h"       //冒泡排序
#i nclude "stdlib.h"
#define M 10

int a(M);  //定义为全局变量

void PRand()
{
   int m,i;
   i=0;
   while(i<M)
   {
   m=rand();   //随机产一个数字
   m=m%100+1;  //将随机产生的数字控制在1-100之间

   a[i++]=m;  
   }
}

void bublle()
{
int flag;
int i,j,temp;

printf("after bublle :\n");
for(i=0;i<M-1;i++)
{
flag=0;           //利用flag可以减少循环次数。倘若数列已经有序则跳出循环
for(j=0;j<M-i-1;j++)
{
if(a[j]>a[j+1])
{
flag=1;         
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
if(flag==0)
break;
}

}

void print()
{
int i;

for(i=0;i<M;i++)
printf("%-4d",a[i]);

printf("\n");
}

void main()
{
int i;

PRand();
print();

bublle();
print();
}
---------------------------------
#i nclude "stdio.h"           //选择排序
#i nclude "stdlib.h"
#define M 10
int a[M];  //定义为全局变量
void PRand()
{
   int m,i;
   i=0;
   while(i<M)
   {
    m=rand();   //随机产一个数字
    m=m%100+1;  //将随机产生的数字控制在1-100之间
    a[i++]=m;  
   }
}
void selectsort()
{
 int i,j,min;
 int temp;
 printf("after selectsort :\n");
 for(i=0;i<M;i++)
 {
  min=i;
  for(j=i;j<M;j++)
  {
   if(a[min]>a[j])
   {
    min=j;
   }
  }
  if(min!=i)
  {
   temp=a[i];
   a[i]=a[min];
   a[min]=temp;
  }
  
 }
}
void print()
{
 int i;
 for(i=0;i<M;i++)
  printf("%-4d",a[i]);
 printf("\n");
}
void main()
{
 int i;
 PRand();
 print();
 selectsort();
 print();
}
-------------------------------------
#i nclude "stdio.h"               //简单插入排序
#i nclude "stdlib.h"
#define M 10
int a[M];  //定义为全局变量
void PRand()
{
   int m,i;
   i=0;
   while(i<M)
   {
    m=rand();   //随机产一个数字
    m=m%100+1;  //将随机产生的数字控制在1-100之间
    a[i++]=m;  
   }
}
void insertsort()
{
 int i,j;
 int temp;
 printf("after insertsort :\n");
 for(i=1;i<M;i++)
 {
  temp=a[i];
  for(j=i-1;j>=0 && a[j]>temp;j--)
  {
   a[j+1]=a[j];
  }
  a[++j]=temp;
 }
}
void print()
{
 int i;
 for(i=0;i<M;i++)
  printf("%-4d",a[i]);
 printf("\n");
}
void main()
{
 int i;

 PRand();
 print();
 insertsort();
 print();
}
---------------------------------
#i nclude <stdio.h>                                                       //shell排序
#i nclude <stdlib.h>
#define M 10
int a[10];
void PRand()
{
 int m,i;
 i=0;
 while(i<M)
 {
  m=rand();
  m=m%100+1;
  a[i++]=m;
 }
}
void print()
{
 int i;
 for(i=0;i<M;i++)
  printf("%-4d",a[i]);
 printf("\n");
}

void shellsort()
{
 int i,j,gap;
 int min;
 gap=M;
 printf("after shellsort :\n");
 while(1)
 {
  gap=gap/2;
  for(i=gap;i<M;i++)
  {
   min=a[i];
   for(j=i-gap;j>=0 && min<a[j];j=j-gap)
   {
    a[j+gap]=a[j];
   }
--------------------------------
#i nclude <stdio.h>                  // 快排
#i nclude <stdlib.h>
#define M 10
void PRand(int *p, int num)   //以前采用的是不带参数的函数,注意:但使用的为全局变量数组。
{                             //也是为了说明C语言中改变参数值的“唯一”的两种方法。传地址和全局变量。
 int count=0;
 int m;
 
 while(count<num)
 {
  m=rand();
  m=m%100+1;
  *p++=m;
  count++;
 }
}
void printarray(int *a,int num)
{
 int count=0;
 while(count<num)
 {
  count++;
  printf("%-4d",*a++);
 }
 printf("\n");
}
int swp(int list[],int left, int right)
{
 int temp=list[left];           //基准数定为序列左边第一个数
 int tp;
 int i,j;
 i=left;
 j=right+1;
 while(1)
 {
  while(list[++i] < temp);    //从左边找到一个比基准数大的数
  while(list[--j] > temp);    //从右边找到一个比基准数小的数
  if(i >= j)
   break;
  tp=list[i];                 //交换三步曲
  list[i]=list[j];
  list[j]=tp;
 }
 list[left]=list[j];
 list[j]=temp;
 return j;              //返回分割后的基准位置,没有此步不能完成递归!
}
void quicksort(int list[], int left, int right)
{
 int pivotpos;
 if(left < right)
 {
  pivotpos=swp(list,left,right);     //分割序列成为两部分,左边的所有数均小于pivotpos,右边均大于。
  quicksort(list,left,pivotpos-1);   //pivotpos分割后左面的部分进行递归
  quicksort(list,pivotpos+1,right);  //pivotpos分割后右面的部分进行递归
 }
}
void main()
{
 int a[M];
 int i;
 PRand(a,M);
 printarray(a,M);
 quicksort(a,0,M-1);
 printf("after quicksort :\n");
 printarray(a,M);
}

Re:C语言的排序算法

     紫晴(游客)发表评论于2007-4-14 23:06:00
非常感谢!真的好厉害哦!不过我想问有堆排序的吗?
个人主页 | 引用 | 返回 | 删除 | 回复 

Re:C语言的排序算法

     紫晴(游客)发表评论于2007-4-14 23:13:00
我还想问:为什么希尔排序后没有结果出现的?
个人主页 | 引用 | 返回 | 删除 | 回复 

处理 SSI 文件时出错

发表评论:

    大名:
    密码: (游客无须输入密码)
    主页:
    标题:
    教育人博客页面数据载入,请耐心等待

处理 SSI 文件时出错