C语言中的一些排序算法

原创 2007年09月19日 21:31:00

近日比较闲,所以整理一下常用的算法,或许对参加考试的朋友有所帮助:

/*对下列的数进行排序*/   #define N 8
/*342,23 58 6 47 855 42 99*/

/**********冒泡排序************************/
void BubbleSort(int R[],int n)
{
  int i,j,temp;
  for(i=0;i<n-1;i++)
    for(j=n-2;j>=i;j--)
      if(R[j]>R[j+1])
      {
        temp=R[j];
        R[j]=R[j+1];
        R[j+1]=temp;
      }

}
/****************************************/

/***********插入排序************************/
void InsertSort(int R[],int n)
{
  int i,j,temp;
  for(i=1;i<n;i++)
  if(R[i]<R[i-1])
  {
     temp=R[i];
     j=i-1;
     while(R[j]>temp&&j>=0)
       R[j+1]=R[j--];
     R[j+1]=temp;
  }

}


/*******************************************/

/***********选择排序***********************/
void SelectSort(int R[],int n)
{
  int i,j,k,temp;
  for(i=0;i<n;i++)
  {
    k=i;
    for(j=i+1;j<n;j++)
      if(R[j]<R[k])
        k=j;
    if(k!=i)
    {
       temp=R[k];
       R[k]=R[i];
       R[i]=temp;
    }
  }
}
/*****************************************/

/**********快速排序*********************/
void QuickSort(int R[],int low,int high)
{
   int pivotpos;
   if(low<high)
   {
     pivotpos=Partition(R,low,high);
     QuickSort(R,low,pivotpos-1);
     QuickSort(R,pivotpos+1,high);
   }
}

int Partition(int R[],int i,int j)
{
  int pivot=R[i];
  while(i<j)
  {
    while(i<j&&R[j]>=pivot)j--;
    if(i<j)
      R[i++]=R[j];
    while(i<j&& R[i]<=pivot)i++;
    if(i<j)
      R[j--]=R[i];
  }
  R[i]=pivot;
  return i;
}
/**********************************/

void main()
{
   int i;
   int arr[]={342,23,58,6,47,855,42,99};
   printf("Bubble Sort Result is:/n");
   BubbleSort(arr,N);
   for(i=0;i<N;i++)
     printf("%d ",arr[i]);

   printf("/nInsert Sort Result is:/n");
   InsertSort(arr,N);
   for(i=0;i<N;i++)
     printf("%d ",arr[i]);

   printf("/nSelect Sort Result is:/n");
   SelectSort(arr,N);
   for(i=0;i<N;i++)
     printf("%d ",arr[i]);

   printf("/nQuick Sort Result is:/n");
   QuickSort(arr,0,N-1);
   for(i=0;i<N;i++)
     printf("%d ",arr[i]);
   getch();
}

以上程序的调试环境是Win-TC windows xp 操作系统 

C语言中三大经典的排序算法

掌握好常用的排序算法,在实际的项目开发中可以节省很多的时间。每一种排序算法在执行的效率上是存在差别的,这些微小的时间差,也许在平常的联系当中感觉不到,但是涉及到数据量比较大或者是在资源比较紧张的系统中...
  • qdlovecsj
  • qdlovecsj
  • 2013年04月08日 19:59
  • 10764

关于C语言中非法常量?

.1415是不是合法的,相当于0.1415? 还有请哪位具体讲一下非法常量有什么类型?拜谢!...
  • mmprintf
  • mmprintf
  • 2018年01月08日 21:40
  • 43

C语言中*和&的区别-代码实现说明

*是指针运算符,可以表示一个变量是指针类型;也可以表示一个指针变量的所指向的存储单元,可以获取某个地址存储的值。 &是取地址符号,既取得某一个变量的地址 int *p=&a; 或 int *p; p...
  • qq_20366761
  • qq_20366761
  • 2016年10月23日 19:51
  • 848

为什么STM32里面一些表达式放函数里面用和直接用效果不用

#include "SPI.h" /*****************************************************************/ void ...
  • ws84643557
  • ws84643557
  • 2011年10月21日 06:55
  • 2053

关于C语言中 || 和 &&的用法

||是逻辑或,例子如下 1 2 3 4 5 6 //表达式1||表达式2 //如果表达式1是true或者表达式2是true,...
  • Dy_1748204009
  • Dy_1748204009
  • 2016年12月13日 11:57
  • 4812

排序算法总结及实现(C语言版)

#include using namespace std; void swap(int &a, int &b) { int temp; temp = a; a = b; b = temp;...
  • Mary19920410
  • Mary19920410
  • 2017年03月18日 15:08
  • 1863

C语言中<>和“”有什么区别

例如你使用的是TurboC include 代表编译时直接在TurboC软件设置指定的路径(默认是TurboC所在文件夹下的include文件夹)中寻找里面是否有stdlib.h的库文件。如果有,直...
  • huayutiancheng
  • huayutiancheng
  • 2016年08月28日 19:53
  • 1319

C语言中#和##的用法

今天在学习Uboot的时候遇到cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep, cmd, usage}这条语句。...
  • shy19910509
  • shy19910509
  • 2014年12月19日 17:03
  • 4248

C语言8大排序算法以及复杂度分析

主要的内排序包括冒泡、插入、希尔、堆排序、归并、快速、桶排序等 冒泡排序 冒泡排序应该是排序中最简单的算法了 主要思路如下: 1: 比较相邻的元素。如果第一个比第二...
  • xs1997
  • xs1997
  • 2016年12月28日 20:31
  • 2342

C语言中内存以及堆栈情况

大学在学习数据结构和C语言过程中总是被什么堆、栈等各种和存储相关名词搞晕,先为了方便以后的学习进行简单总结。    一般我们编译的C代码中在内存中分下面几个区:        1、栈区(stac...
  • huangzhiyuan111
  • huangzhiyuan111
  • 2016年04月07日 21:29
  • 367
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言中的一些排序算法
举报原因:
原因补充:

(最多只允许输入30个字)