2019独角兽企业重金招聘Python工程师标准>>>

《数据结构(C语言版)》的最后一次实验作业(排序),要求如下:

数据结构实验5:排序 要求: 1、直接插入排序; 2、shell 排序; 3、简单选择排序; 4、快速排序; 5、堆排序(选做);

分享一下我(@ tongtongxyz)的小作业吧。

/****************************************  Filename: sort.cpp                 **  Function: 典型排序算法             **  Author: TongtongXyz                **  Weibo: @tongtongxyz                **  Date: 20130112                     ****************************************/
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100    //排序元素数
typedef int KeyType;
typedef int InfoType;
typedef struct{KeyType key;InfoType otherinfo;
}RedType;
typedef struct{RedType r[MAXSIZE+1];int length;
}SqList;
typedef SqList HeapType;
void InsertSort(SqList &L){//直接插入排序int i, j;for(i = 2; i <= L.length; ++i){if(L.r[i].key < L.r[i-1].key){L.r[0] = L.r[i];L.r[i] = L.r[i-1];for(j = i - 2; L.r[0].key < L.r[j].key; --j){L.r[j+1] = L.r[j];}L.r[j+1] = L.r[0];}}
}
void SortOutput(SqList &L){printf("当前顺序表中的关键字序列为:\n");for(int i = 1; i <= L.length; i++){printf("%d  ", L.r[i].key);}printf("\n\n");
}
void SortInput(SqList &L, KeyType key){L.r[++L.length].key = key;
}
void ShellInsert(SqList &L, int dk){int i, j;for(i = dk + 1; i <= L.length; ++i){if(L.r[i].key < L.r[i-dk].key){L.r[0] = L.r[i];for(j = i - dk; j > 0 && 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(SqList &L, int dlta[], int t){//shell排序int k;for(k = 0; k < t; ++k){dlta[k] = 2^(t-k+1) - 1;ShellInsert(L, dlta[k]);}
}
int SelectMinKey(SqList L, int i){KeyType minkey;for(minkey = i; i <= L.length; i++){if(L.r[minkey].key > L.r[i].key){minkey = i;}//minkey = ((L.r[i].key < L.r[i+1].key) ? i : (i+1));}return minkey;
}
void SelectSort(SqList &L){//简单选择排序int i, j;for(i = 1; i < L.length; ++i){j = SelectMinKey(L, i);if(i != j){L.r[0] = L.r[i];L.r[i] = L.r[j];L.r[j] = L.r[0];}}
}
int Partition(SqList &L, int low, int high){KeyType pivotkey;L.r[0] = L.r[low];pivotkey = L.r[low].key;while(low < high){while(low < high && L.r[high].key >= pivotkey){--high;}L.r[low] = L.r[high];while(low < high && L.r[low].key<= pivotkey){++low;}L.r[high] = L.r[low];}L.r[low] = L.r[0];return low;
}
void Qsort(SqList &L, int low, int high){KeyType pivotloc;if(low < high){pivotloc = Partition(L, low, high);Qsort(L, low, pivotloc - 1);Qsort(L, pivotloc + 1, high);}
}
void QuickSort(SqList &L){//快速排序Qsort(L, 1, L.length);
}
void HeapAdjust(HeapType &H, int s, int m){RedType rc;int j;rc = H.r[s];for(j = 2 * s; j <= m; j *= 2){if(j < m && H.r[j].key < H.r[j+1].key){++j;}if(!(rc.key < H.r[j].key)){break;}H.r[s] = H.r[j]; s = j;}H.r[s] = rc;
}
void HeapSort(HeapType &H){//堆排序int i;for(i = H.length/2; i > 0; --i){HeapAdjust(H, i, H.length);}for(i = H.length; i > 1; --i){H.r[0] = H.r[1];H.r[1] = H.r[i];H.r[i] = H.r[0];HeapAdjust(H, 1, i - 1);}
}
int main(void){SqList L;L.length = 0;int t = 4;    //shell排序参数tint dlta[t];   //shell排序参数dlta[]KeyType key;while(1){int option;printf("请选择排序算法:\n1. 直接插入排序;\n2. shell 排序\n3. 简单选择排序\n4. 快速排序\n5. 堆排序\n注:“ctrl+c”退出程序,“ctrl+z”输入文件结束符EOF\n请输入选择并回车确认:");scanf("%d", &option);printf("请输入关键字序列(以EOF结束)并回车确认:");while(scanf("%d", &key) != EOF){SortInput(L, key);}switch(option){case 1 :InsertSort(L);break;case 2 :ShellSort(L, dlta, t);break;case 3 :SelectSort(L);break;case 4 :QuickSort(L);break;case 5 :HeapSort(L);break;default:printf("您输入的参数有误,请重新输入!\n");}SortOutput(L);}return 0;
}

转载于:https://my.oschina.net/tongtongxyz/blog/101834

典型排序算法(C语言实现)相关推荐

  1. 密码学:c/c 语言实现 pdf,典型密码算法C语言实现pdf

    典型密码算法C语言实现 内容简介 <典型密码算法C语言实现>详细讲述了一些典型密码算法的算法原理及C语言实现.书中密码算法包括:序列密码.分组密码.公钥密码和Hash算法,其中序列密码有祖 ...

  2. 经典的十种排序算法 C语言版

    经典的十种排序算法(C语言版) 1.冒牌排序 冒牌排序的特点 ​ 一趟一趟的比较待排序的数组,每趟比较中,从前往后,依次比较这个数和下一个数的大小,如果这个数比下一个数大,则交换这两个数,每趟比较后, ...

  3. 部分排序算法c语言实现

    代码比较粗糙,主要是用于对排序算法的理解,因而忽略了边界和容错处理相关代码. 相关文档: Insert Sort  ,Bubble Sort ,Select Sort ,Shell sort ,Qui ...

  4. 数据结构之排序算法(C语言)

    一.冒泡排序 冒泡排序是最简单的排序之一了,其大体思想就是通过与相邻元素的比较和交换来把小的数交换到最前面.这个过程类似于水泡向上升一样,因此而得名.举个栗子,对5,3,8,6,4这个无序序列进行冒泡 ...

  5. 九大排序算法-C语言实现及详解

    概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. 当n较大, ...

  6. 鸡尾酒排序算法c语言,[golang] 数据结构-鸡尾酒排序

    吐个槽 又是一个不正经取名的排序算法.真要说和鸡尾酒间的关系,大概就是想喝到鸡尾酒(得到排序好的队列)就要摇晃酒杯让不同的成分混合均匀(向两个方向冒泡排序) 原理 鸡尾酒排序(Cocktail Sor ...

  7. 排序算法c语言描述---归并排序

    排序算法系列学习,主要描述冒泡排序,选择排序,直接插入排序,希尔排序,堆排序,归并排序,快速排序等排序进行分析. 文章规划: 一.通过自己对排序算法本身的理解,对每个方法写个小测试程序. 具体思路分析 ...

  8. 五种排序算法 -- Python语言实现

    交换两项位置方法: # -*- coding: utf-8 -*- def swap(lyst, i, j):temp = lyst[i]lyst[i] = lyst[j]lyst[j] = temp ...

  9. 加标志量的选择排序算法c语言,置换选择排序算法详解(C语言实现)

    上一节介绍了增加 k-路归并排序中的 k 值来提高外部排序效率的方法,而除此之外,还有另外一条路可走,即减少初始归并段的个数,也就是本章第一节中提到的减小 m 的值. m 的求值方法为:m=⌈n/l⌉ ...

最新文章

  1. 1107 Linq高级查询
  2. 在ubuntu16.04中一键创建LAMP环境
  3. win7系统自带截图工具快捷键是什么?怎么设置快捷键
  4. NHibernate Step By Step(2)-继承映射
  5. ztree 更新配置后重新渲染树_【问】zTree异步加载时添加父节点怎样避免再次加载整树...
  6. ANSYS——查看某一截面的云图分布(也叫做切片图)
  7. DOCKER功能练习
  8. android-生命周期和GC
  9. 微信小程序开发工具基本介绍入门级(备忘)
  10. 日本JAFFE表情库
  11. Java Web前后端分离架构
  12. 异常:Handler sending message to a Handler on a dead thread
  13. 广西南宁机器人比赛_缤纷校园|2018年广西中小学电脑机器人竞赛开赛 南宁学子大显身手...
  14. e470c拆机图解全拆 thinkpad_THINKPAD e470硬盘拆解教程是?
  15. sklearn中KMeans重要参数n_clusters
  16. 第四周web课堂作业
  17. Java+MySql存储表情符
  18. Baumer工业相机堡盟工业相机如何联合BGAPISDK和佳能EF变焦镜头实现相机的自动变焦(C++)
  19. php 实现店铺装修5
  20. linux locale设置

热门文章

  1. iphone输入法换行_【每日一技】iPhone输入法不能换行的痛点,用这招0.5秒解决
  2. python自带的库有哪些餐厅_Python 常用的标准库以及第三方库有哪些
  3. matlab 指定区域随机游走_了解随机游走模型和移动平均过程(Python)
  4. java string 精度_Java 中的浮点数取精度方法
  5. Python编程基础13:文件读写操作
  6. 解决Python shell中Delete-Backspace键乱码问题
  7. SDOI2017R1(姑且是游记)
  8. bzoj4417 [Shoi2013]超级跳马 矩乘
  9. 2017.8.7 数学作业 思考记录
  10. win10无法装载iso文件_win10镜像文件不能安装怎么办?win10镜像文件无法安装的解决教程...