冒泡 选择 插入 归并 堆排 快排 希尔


/*  Sort Rate Study                   */
/*  Author: ZZ_Inori_Evanescence/Elapsed_Hiyori   */
/*  Home: http://blog.csdn.net/Elapsed_Hiyori     */
/*  Date: 2012/12/16  10:57           */
/*  ***********************************************/#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <malloc.h>#define FALSE  0
#define TRUE    1
#define ElementType int
#define MAXNUM 100000/* ========================================= */
/* Random Numbers;
/* ========================================= */ElementType *GetRandomNumbers( void ){int i;ElementType *TempArray;TempArray = ( ElementType * )malloc( MAXNUM * sizeof( ElementType ) );for( i = 0; i < MAXNUM; i++ )TempArray[i] = rand() % 999999;return TempArray;
}/* ========================================= */
/* Swap;
/* ========================================= */void Swap( int *a, int *b ){int TempCell;TempCell = *a;*a = *b;*b = TempCell;
}/* ========================================= */
/* Bubble Sort;
/* ========================================= */void BubbleSort( ElementType *Array, int n ){int i, LastExchangeIndex,j;i = n-1;while( i > 0 ){LastExchangeIndex = 0;for( j = 0; j < i; j++ )if( Array[j+1] < Array[j] ){Swap( &Array[j+1], &Array[j]  );LastExchangeIndex = j;}i = LastExchangeIndex;}
}/* ========================================= */
/* Select Sort;
/* ========================================= */void SelectSort( ElementType *Array, int n ){int i,j,min;for( i = 0; i < n-1; i++ ){int Index = 0;min = Array[i];for( j = i+1; j < n; j++ ){if( Array[j] < min ){min = Array[j];Index = j;}}if( Index ){Swap( &Array[Index], &Array[i] );}}}/* ========================================= */
/* Insertion Sort;
/* ========================================= */void InsertionSort( ElementType *Array, int n ){int j,P;ElementType TempCell;for( P = 1; P < n; P++ ){TempCell = Array[P];for( j = P; j > 0 && Array[j-1] > TempCell; j-- )Array[j] = Array[j-1];Array[j] = TempCell;}
}/* ========================================= */
/* Shell Sort;
/* Increment Sequence: Shell Sequence;
/* ========================================= */void ShellSort( ElementType *Array, int n ){int i,j,Increment;ElementType TempCell;for( Increment = n/2; Increment > 0; Increment /= 2 )for( i = Increment; i < n; i++ ){TempCell = Array[i];for( j = i; j >= Increment; j -= Increment )if( TempCell < Array[j-Increment] )Array[j] = Array[j-Increment];elsebreak;Array[j] = TempCell;}}/* ========================================= */
/* Heap Sort;
/* ========================================= */#define LeftChild( i ) ( 2 * ( i ) + 1 )void PercDown( ElementType *Array, int i, int n ){int Child;ElementType TempCell;for( TempCell = Array[i]; LeftChild( i ) < n; i = Child ){Child = LeftChild( i );if( Child != n-1 && Array[Child+1] > Array[Child] )Child++;if( TempCell < Array[Child] )Array[i] = Array[Child];elsebreak;}Array[i] = TempCell;
}void HeapSort( ElementType *Array, int n ){int i;for( i = n/2; i >= 0; i-- )  /* BuildHeap */PercDown( Array, i, n );for( i = n-1; i > 0; i-- ){Swap( &Array[0], &Array[i] );PercDown( Array, 0, i );}
}/* ========================================= */
/* Merge Sort;
/* ========================================= */void Merge( ElementType *Array, ElementType *TempArray,int Lpos, int Rpos, int RightEnd ){int i, LeftEnd, NumElements, TempPos;LeftEnd = Rpos - 1;TempPos = Lpos;NumElements = RightEnd - Lpos + 1;while( Lpos <= LeftEnd && Rpos <= RightEnd )if( Array[Lpos] <= Array[Rpos] )TempArray[TempPos++] = Array[Lpos++];elseTempArray[TempPos++] = Array[Rpos++];while( Lpos <= LeftEnd )TempArray[TempPos++] = Array[Lpos++];while( Rpos <= RightEnd )TempArray[TempPos++] = Array[Rpos++];for( i = 0; i < NumElements; i++, RightEnd-- )Array[RightEnd] = TempArray[RightEnd];
}void Msort( ElementType *Array, ElementType *TempArray, int Left, int Right ){int Center;if( Left < Right ){Center = ( Left + Right ) / 2;Msort( Array, TempArray, Left, Center );Msort( Array, TempArray, Center+1, Right );Merge( Array, TempArray, Left, Center+1, Right );}
}void MergeSort( ElementType *Array, int n ){ElementType *TempArray;TempArray = ( ElementType * )malloc( n * sizeof( ElementType ) );if( TempArray != NULL ){Msort( Array, TempArray, 0, n-1 );free( TempArray );}elseprintf("No Space For Temp Array!!!\n");
}/* ========================================= */
/* Quick Sort;
/* Partition: Median-of-Three Partitioning
/* ========================================= */ElementType Median_Three( ElementType *Array, int Left, int Right ){int Center = ( Left + Right ) / 2;if( Array[Left] > Array[Center] )Swap( &Array[Left], &Array[Center] );if( Array[Left] > Array[Right] )Swap( &Array[Left], &Array[Right] );if( Array[Center] > Array[Right] )Swap( &Array[Center], &Array[Right] );Swap( &Array[Center], &Array[Right-1] );return Array[Right-1];
}#define Cutoff ( 3 )void Qsort( ElementType *Array, int Left, int Right ){int i,j;ElementType Pivot;if( Left + Cutoff <= Right ){Pivot = Median_Three( Array, Left, Right );i = Left; j = Right - 1;for( ; ; ){while( Array[++i] < Pivot );while( Array[--j] > Pivot );if( i < j )Swap( &Array[i], &Array[j] );elsebreak;}Swap( &Array[i], &Array[Right-1] );Qsort( Array, Left, i-1 );Qsort( Array, i + 1, Right );}elseInsertionSort( Array+Left, Right-Left+1 );
}void QuickSort( ElementType *Array, int n ){Qsort( Array, 0, n-1 );
}/* ================================================ */
/*                     END  !                       */

数据结构与算法分析之---部分排序算法的实现相关推荐

  1. C++——《数据结构与算法》实验——排序算法的实现

    问题描述 1) 动态输入一组数字序列; 2)实现直接插入排序.简单选择排序.冒泡排序.快速排序算法; 3)在主函数中,依次测试上述算法. 类型定义 #define MAX SIZE 100 typed ...

  2. 十一大排序算法的实现

    十一大排序算法的实现 前言 终于写完了,九大排序算法亲自打一遍,给自己加深印象,算是一种模板,留给自己以后用,也分享给大家. U p d a t e : Update: Update: 2020.12 ...

  3. 数据结构实验四 排序算法的实现

    广州大学学生实验报告 开课实验室:计算机科学与工程实验(电子楼416)     2019年6月4日 学院 计算机科学与教育软件学院 年级.专业.班 姓名 学号 实验课程名称 数据结构实验 成绩 实验项 ...

  4. 【swjtu】数据结构实验9_多种排序算法的实现

    实验内容及要求: 输入n个整数,分别用希尔排序.快速排序.堆排序和归并排序实现由小到大排序并输出排序结果.要求n=10,15,20进行三组排序实验. 实验目的: 掌握希尔排序.快速排序.堆排序.归并排 ...

  5. 数据结构和算法之四:排序算法一

    数据结构基础之排序算法一 学习算法,排序算法当然是不能少的,这次我们来学习一下基础的插入排序,对插入优化的希尔排序,以及用得最多的归并排序. 插入排序 插入排序,顾名思义,就是通过插入来排序,简单来说 ...

  6. 数组的几种排序算法的实现(1)

    数据结构中的排序算法,各有用处,比如: 1,直接插入排序,在序列基本有序的情况下,移动的次数比较少,但是比较次数是一样的 复杂度O(n*n); 2,冒泡排序,这个不用说了吧,刚学C的人都懂了 3,希尔 ...

  7. java 排序算法面试题_面试题: java中常见的排序算法的实现及比较

    1.冒泡排序 1.1 冒泡排序普通版 每次冒泡过程都是从数列的第一个元素开始,然后依次和剩余的元素进行比较,若小于相邻元素,则交换两者位置,同时将较大元素作为下一个比较的基准元素,继续将该元素与其相邻 ...

  8. Java基础学习总结(28)——Java对各种排序算法的实现

    2019独角兽企业重金招聘Python工程师标准>>> 这里总结下各种排序算法的java实现 冒泡排序 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 ...

  9. 排序算法的实现(C/C++实现)

    存档: 1 #include <iostream> 2 #include <stdlib.h> 3 #include <sort.h> 4 #define maxs ...

最新文章

  1. HTML的标签描述21
  2. 实现一个可管理、增发、兑换、冻结等高级功能的代币
  3. MySQL中函数CONCAT及GROUP_CONCAT 对应oracle中的wm_concat
  4. PAT 1087 有多少不同的值(20 分)- 乙级
  5. 在数据库WSEDSQLDB中检测到一个可能的数据库一致性问题。|解决方法
  6. 算法:分离链表为两部分,小于某个值都在左边,大于等于某个值在右边 Partition List
  7. Express框架学习笔记-静态资源的处理
  8. 历代Windows版本
  9. 虚拟大师怎么修改手机_[Android] 新版手机虚拟大师VMOS Pro超精简无广告2秒启动...
  10. 怎么复制黑苹果config配置_Catia中端电脑配置推荐(黑苹果)
  11. mac键盘快捷键详解,苹果电脑键盘快捷键图文教程
  12. 工业镜头景深计算及工业镜头技术分析
  13. 北京英语计算机统考,北京市2019年高考英语听力机考问答
  14. 根据一段时间区间,按月份拆分成多个时间段
  15. Photoshop实用技巧教程
  16. 2021高考成绩已出城市查询,查分时间已公布!高考结束后别急着浪,这些填志愿技巧考生需知晓...
  17. spring cloud hystirx熔断器
  18. Windows系统下自带压缩文件工具之makecab
  19. 最小编辑距离算法及python实现
  20. 基于SURF特征提取的图像配准算法的matlab仿真

热门文章

  1. java 微秒_现在有任何新的方法可以在Java中以微秒的...
  2. 有关Mac系统的资源库文件夹
  3. 为什么我加了过滤器然后就登不进去了_禁止装前置过滤器?很多业主为此与物业起争执,后才明白错怪物业...
  4. 响铃:百度图腾要做正版授权平台,它能解决图片版权双向痛点吗?
  5. [转]我的销售心得(续2)-如何把握一个项目
  6. PCB中的常见名词解析solder Mask 和paste Mask
  7. 利用CSS背景定位实现列表项目符号图像的精确定位(ul,li,自定义项目符号)
  8. 经济学、金融学、贸易
  9. 与JBuilder2007的第一次亲密接触
  10. kotlin语言中的out和in