c语言实现各种排序,c语言实现各种排序算法
以下是我用c语言实现的各种排序算法#pragma once;
#define MAXSIZE 20000
typedef int KeyType;
typedef char Infomation;
typedef int LESSTNAN;
typedef int ShellData[];
static const char info='0';
#ifndef _SDTLIB_H
#define _STDLIB_H
#include
#include
#endif
#ifndef _DEBUG_H
#define _DEBUG_H
#include
#include
#endif
#ifndef _TYPE_H
#define _TYPE_H
typedef struct
{
KeyType Key;
Infomation Other;
}Type;
#endif
typedef void(*Function)(Type);
#ifndef _LIST_H
#define _LIST_H
typedef struct
{
Type r[MAXSIZE + 1];
int Length;
}List;
#endif
#pragma once;
#include "stdafx.h"
void InitList(List &L);
void Random(List &L);
bool LessThan(LESSTNAN LParam,LESSTNAN WParam);
void InsertSort(List &L);
void ShellSort(List &L,ShellData Data,int DataLength);
void ShellInsert(List &L,int dk);
void BubbleSort(List &L);
void QuickSort(List &L, int Low, int High);
int Partition(List &L, int Low, int High);
void SelectSort(List &L);
int SelectMinKey(List &L, int Start);
void HeapSort(List &L);
void HeapAdjust(List &L, int s, int m);
void RadixSort(List &L);
Type* MergeSort(List &L);
void MergingSort(Type SR[], Type TR[], int s, int t);
void Merge(Type SR[], Type TR[], int i, int m, int n);
void ListTranverse(List &L,Function p_function);
bool IsType(List &L,int Length, KeyType param);
#include "SortList.h"
void InitList(List &L)
{
int i;
L.Length = 0;
for (i = 0; i
{
L.r[i].Key = 0;
L.r[i].Other = info;
}
}
void Random(List &L)
{
srand((unsigned)time(NULL));
int i=1;
while (i
{
int temp = rand();
if (IsType(L, i, temp) == false)
{
L.r[i].Key = temp;
i++;
}
}
L.Length = MAXSIZE;
}
bool IsType(List &L,int Length, KeyType param)
{
int i;
for (i = 1; i
{
if (L.r[i].Key == param)
return true;
}
return false;
}
bool LessThan(LESSTNAN LParam, LESSTNAN WParam)
{
if (LParam
return true;
else
return false;
}
void ListTranverse(List &L, Function p_function)
{
int i;
for (i = 1; i
{
(*p_function)(L.r[i]);
}
}
void InsertSort(List &L)
{
int i, j;
for (i = 2; i
{
if (LessThan(L.r[i].Key, L.r[i - 1].Key) == true)
{
L.r[0] = L.r[i];
L.r[i] = L.r[i - 1];
for (j = i - 2; LessThan(L.r[0].Key, L.r[j].Key); j--)
{
L.r[j + 1] = L.r[j];
}
L.r[j + 1] = L.r[0];
}
}
}
void ShellInsert(List &L, int dk)
{
int i, j;
for (i = dk + 1; i
{
if (LessThan(L.r[i].Key, L.r[i - dk].Key) == true)
{
L.r[0] = L.r[i];
for (j = i - dk; j>0 && LessThan(L.r[0].Key, L.r[j].Key); j -= dk)
{
L.r[j + dk] = L.r[j];
}
L.r[j + dk] = L.r[0];
}
}
}
void ShellSort(List &L, ShellData Data, int DataLength)
{
int i;
for (i = 0; i
{
ShellInsert(L, Data[i]);
}
}
void BubbleSort(List &L)
{
int i, j;
Type temp;
for (i = 1; i
{
for (j = 1; j
{
if (L.r[j].Key>L.r[j + 1].Key)
{
temp = L.r[j];
L.r[j] = L.r[j + 1];
L.r[j + 1] = temp;
}
}
}
}
void QuickSort(List &L, int Low, int High)
{
if (Low
{
int Piv = Partition(L, Low, High);
QuickSort(L, Low, Piv - 1);
QuickSort(L, Piv + 1, High);
}
}
int Partition(List &L, int Low, int High)
{
KeyType PivotKey = L.r[Low].Key;
Type temp;
while (Low
{
while (Low = PivotKey)
{
High--;
}
temp = L.r[Low];
L.r[Low] = L.r[High];
L.r[High] = temp;
while (Low
{
Low++;
}
temp = L.r[Low];
L.r[Low] = L.r[High];
L.r[High] = temp;
}
return Low;
}
void SelectSort(List &L)
{
int i,j;
Type temp;
for (i = 1; i
{
j = SelectMinKey(L, i);
if (i != j)
{
temp = L.r[i];
L.r[i] = L.r[j];
L.r[j] = temp;
}
}
}
int SelectMinKey(List &L, int Start)
{
KeyType temp=L.r[Start].Key;
int Min=Start;
while (Start
{
if (temp>L.r[Start].Key)
{
temp = L.r[Start].Key;
Min = Start;
}
Start++;
}
return Min;
}
void Merge(Type SR[], Type TR[], int i, int m, int n)
{
int k,j;
for (j = m + 1, k = i; i <= m&&j <= n; k++)
{
if (LessThan(SR[i].Key, SR[j].Key) == true)
TR[k] = SR[i++];
else
TR[k] = SR[j++];
}
while (i <= m)
{
TR[k] = SR[i];
i++;
k++;
}
while (j <= n)
{
TR[k] = SR[j];
j++;
k++;
}
}
void MergingSort(Type SR[], Type TR[], int s, int t)
{
if (s == t)
TR[s] = SR[s];
else
{
int m = (s + t) / 2;
MergingSort(SR, TR, s, m);
MergingSort(SR, TR, m + 1, t);
Merge(SR, TR, s, m, t);
}
}
Type* MergeSort(List &L)
{
Type * temp=new Type[MAXSIZE+1];
MergingSort(L.r, temp, 1, L.Length);
return temp;
}
void HeapAdjust(List &L, int s, int m)
{
Type RC = L.r[s];
int j;
for (j = 2 * s; j <= m; j *= 2)
{
if (j
j++;
if (LessThan(RC.Key, L.r[j].Key) == false)
break;
L.r[s] = L.r[j];
s = j;
}
}
void HeapSort(List &L)
{
int i;
Type temp;
for (i = L.Length / 2; i > 0; i--)
{
HeapAdjust(L, i, L.Length);
}
for (i = L.Length; i > 1; i--)
{
temp = L.r[1];
L.r[1] = L.r[i];
L.r[i] = temp;
HeapAdjust(L, 1, i - 1);
}
}
c语言实现各种排序,c语言实现各种排序算法相关推荐
- R语言可视化、编写自定义函数可视化水平排序条形图(horizontal bar plot)、自定义图像布局模仿经济学人杂志可视化效果、右侧添加标签数值图像方框、自定义背景色、水平条形图中间线条等
R语言可视化.编写自定义函数可视化水平排序条形图(horizontal bar plot).自定义图像布局模仿经济学人杂志可视化效果.右侧添加标签数值图像方框.自定义背景色.水平条形图中间线条.网格线 ...
- R语言使用str_order函数和str_sort函数对字符向量进行排序(str_order返回字符串排序的次序值(索引)、str_sort返回排序后的字符串)
R语言使用str_order函数和str_sort函数对字符向量进行排序(str_order返回字符串排序的次序值(索引).str_sort返回排序后的字符串) 目录
- R语言dplyr包arrage函数排序dataframe实战:单列排序、多列排序、自定义排序
R语言dplyr包arrage函数排序dataframe实战:单列排序.多列排序.自定义排序 目录 R语言dplyr包arrage函数排序dataframe实战:单列排序.多列排序
- PTA 基础编程题目集 7-27 冒泡法排序 C语言
PTA 基础编程题目集 7-27 冒泡法排序 C语言 将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们.通过一遍扫描,则最后一 ...
- c语言文件归并问题_C语言 | 选择法对10个数排序
例60:C语言实现用选择法对10个整数排序. 解析:选择排序思路如下,设有10个元素a[1]~a[10],将a[1]与a[2]~a[10],若a[1]比a[2]~a[10]都小,则不进行交换,即无任何 ...
- C语言排序(桶排序,冒泡排序,选择排序,插入排序,快速排序)
参考:C语言五大排序(桶排序,冒泡排序,选择排序,插入排序,快速排序)动态演示 作者:一只青木呀 发布时间: 2020-09-09 20:18:43 网址:https://blog.csdn.net/ ...
- 论文浅尝 - EMNLP2020 | 通过词重排序跨语言解析
笔记整理 | 吴林娟,天津大学硕士 来源:EMNLP2020 链接:https://www.aclweb.org/anthology/2020.findings-emnlp.265.pdf 动机 依赖 ...
- C语言 数组排序 – 快速法排序 - C语言零基础入门教程
目录 一.简介 二.数组快速法排序原理 三.数组快速法排序实战 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.简介 经过前面的学习, ...
- C语言 数组排序 – 插入法排序 - C语言零基础入门教程
目录 一.简介 二.数组插入法排序原理 三.数组插入法排序实战 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.简介 经过前面的学习, ...
- C语言 数组排序 – 选择法排序 - C语言零基础入门教程
目录 一.简介 二.数组选择法排序原理 三.数组选择法排序实战 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.简介 经过前面的学习, ...
最新文章
- js中let和var定义变量的区别
- Android提醒微技巧,你真的了解Dialog、Toast和Snackbar吗?
- muduo之TimerQueue
- LeetCode Valid Sudoku
- django from组件 实现增加 删除 编辑(推荐用法)
- 关于-32768补码的问题
- 去小公司了解哪些工具?
- 数学和古典诗词的意境
- mysql5.7.20 sql mode_MySQL5.7中的sql_mode默认值带来的坑及解决方法
- mysql 查询密码 cmd
- paip.提升用户检验-----列表摘要
- 罗马数字java代码实现_6.2 罗马数字转整数
- 计算机网络显示正常 但无法上网怎么办,如何解决显示网络已连接但无法上网...
- 基于java汽车4S服务管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
- OLTP 和 OLAP 的区别?
- vmware 下ubuntu共享主机文件
- 【java笔记-006】【uni-app】当前运行的基座不包含原生插件[xxx],请在manifest中配置该插件,重新制作包括该原生插件的自定义运行基座
- 【转】在win10接双显示器(扩展模式)怎么把鼠标游标切换到第二台显示器上?
- 正则验证邮箱、8到16位数字字母特殊符号组合
- 写给迷茫期产品经理的一封信
热门文章
- “不翻身,就要翻船”!帆软独家:制造业数字化转型解决方案
- 初学者内心最慌的问题:适不适合做一名码农(程序员)??
- 别具一格的HAO3GP整站源码花坛
- ★(在人生的过程中我的65047777
- 莱比锡爆料:《星际争霸2》估计明年也没戏
- 除了要求app随手机壳颜色变之外,产品还要求....
- 阿里年薪40万老人简历:83岁精通网购,62岁会H5、PS
- python模块下载连接清华镜像的具体步骤_anaconda | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror...
- Adobe illustrator 图的放置和微调 - 连载 9
- 生信分析和统计绘图资源推荐!