当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

C语言实现的排序代码

发表于: 2011-03-04   作者:bsr1983   来源:转载   浏览次数:
摘要:       准备数据结构上级考试时的练习代码,置于此以备后用!              #include<stdio.h> #define MAX 100 //插入排序 void insertSort(int*

      准备数据结构上级考试时的练习代码,置于此以备后用!

     

      

#include<stdio.h>
#define MAX 100
//插入排序
void insertSort(int* array,int n)
{
       int i,j,temp;
       for(i=1;i<n;i++)
       {
           //获取当前要进行排序的元素array[i]
           temp=array[i];
           //比较已排序区的数据与当前要进行排序的数据,如果当前排序的元素较小,
           //则后移已排序的元素,找到其合适的位置后插入
           for(j=i;j>0&&temp<array[j-1];j--)
           {
                array[j]=array[j-1];
                array[j-1]=temp;
            }
            printf("第%d趟排序:",i);
            printArray(array,n);
       }
  }
  //希尔排序
void shellSort(int* array,int n)
{
       int i,j,temp;
       int gap=0;
       //根据n大小,确定首次排序的分组间隔大小
       while(gap<=n)
       {
           gap=gap*3+1;
       }
       printf("元素总数为:%d,首次分组间隔gap=%d\n",n,gap);
       //当分组间隔大于0时,对各分组的元素进行组内排序
       while(gap>0)
       {
            printf("分组间隔gap=%d\n",gap);
            //对组内元素进行直接插入排序
            for(i=gap;i<n;i++)
            {
                //获取下一个要进行排序的组内元素索引
                j=i-gap;
                temp=array[i];
                while((j>=0)&&(array[j]>temp))
                {
                    //将a[j]这一元素移动到组内的下一位置
                    array[j+gap]=array[j];
                    j=j-gap;//下一个组内元素的索引
                }
                array[j+gap]=temp;
            }
            gap=(gap-1)/3;//获取下一个分组间隔
       }
       printArray(array,n);
}
  //冒泡排序
  void bobbleSort(int* array,int n)
  {
     int i,j,tmp;
     for(i=0;i<n;i++)
     {
        for(j=i;j<n;j++)
        {
             if(array[i]>array[j])
             {
                tmp=array[i];
                array[i]=array[j];
                array[j]=tmp;
             }
        }
     }
     printArray(array,n);
  }
  void printArray(int* array,int n)
  {
      int i;
      for(i=0;i<n;i++)
      {
         printf("%d \t",array[i]);
      }
      printf("\n");
  }
  void main()
  {
      int array[MAX];
      int i,len=0;
      int tmpnum;
      for(i=0;i<MAX;i++)
      {
          array[i]=0;
      }
      printf("please input the number for sort,end with -1\n");
      do
      {
          scanf("%d",&tmpnum);
          if(tmpnum!=-1)
          {
             array[len]=tmpnum;
             len++;
          }
      }
      while(tmpnum!=-1);
      printArray(array,len);
      //printf("冒泡排序\n");
      //bobbleSort(array,len);
      //printf("直接插入排序\n");
      //insertSort(array,len);
      printf("希尔排序\n");
      shellSort (array,len);
  }

  

C语言实现的排序代码

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
对这个有向图进行拓扑排序 /* * 拓扑排序(采用邻接矩阵存储) */ #include<stdio.h> #define
0.序   本人现读本科大二,这学期学习数据结构,老师为我们的期末作业布置一道任选题,而我一直以
利用归并排序法对序列排序的示意图(递归法): 一、算法分析:利用递归的分治方法:1、将原序列细
练手代码(分治实现): input: int input[] = {12,6,3,9,10,6,2}; output: =====================
排序算法系列学习,主要描述冒泡排序,选择排序,直接插入排序,希尔排序,堆排序,归并排序,快速
冒泡排序算法的运作如下: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻
算法的设计策略: 1:蛮力法------穷尽所有可能性 2:递归技术:hanno法 3:分治法:分而制之:一分
8种主要排序算法的C#实现 新的一年到了,很多园友都辞职要去追求更好的工作环境,我也是其中一个,
排序算法系列学习,主要描述冒泡排序,选择排序,直接插入排序,希尔排序,堆排序,归并排序,快速
最近几月一直在自学C语言和数据结构,先是写了排序二叉树,觉得平衡二叉树作为一个经典数据结构,有
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号