插入排序监视哨和鸡尾酒排序

插入排序(带监视哨):
思路:设置a[0]元素为监视哨,a[1]~a[N]存放数据
a[1]为第一个元素,根据插入排序的思想,默认a[1[有序,从i = 2开始向前进行插入,如:
数组:

          |a[]| 0 | 1 | 2 | 3 | 4 | 5 ||num| 0 | 5 | 4 | 3 | 1 | 8 |

(注:a[0]初始化为0)
注:如果不用监视哨,进行普通插入排序,则不用空出a[0],其中原来a[0]的作用可用一个普通的int型变量临时存放,比如int temp;用temp保存待插入数的值。
普通插入排序,需要两个关键步骤:1.找位置 2.移动数组中数字“腾出”该位置,执行插入,temp变量存放待插入数谨防数组移动时被“覆盖”,所以需要二次遍历。
带监视哨的插排,遍历过程中进行数组的数字移动,找到位置后立即插入,只需一次遍历。
以下为带监视哨的方法:
代码如下:

#include <stdio.h>
#include <time.h>
#define MAXLEN 10void InsertSort(int * a);
void Print(int * a);int main(void)
{int i, a[MAXLEN+1] = {0};//初始化数组srand((unsigned)time(NULL));//生成随机数,赋给数组printf("Array number before sort:\n");for (i = 1; i <= MAXLEN; i ++)a[i] = rand() % 101;Print(a);//输出生成的随机数数组InsertSort(a);printf("Array number after sort:\n");Print(a);//输出排序后的数组}void InsertSort(int * a)
{int i , j;for (i = 2; i <= MAXLEN; i ++){a[0] = a[i];//每一次循环保留待插数的值// 防止数组移动时将其覆盖for (j = i - 1; a[j] > a[0]; j --)a[j+1] = a[j];//该循环为了找空位,将监视哨插到合适大小的地方a[j+1] = a[0];//插入监视哨}return;
}void Print(int * a)
{int i = 1;for (; i <= MAXLEN; i ++)printf("%d ", a[i]);printf("\n\n");return;
}

运行结果:

鸡尾酒排序:
*为冒泡排序的改进:*感觉只是外层大循环次数少了,但是每一次循环内容增多了
注:小声说一句:二者在处理乱序的众多数字时,效率都很差,效率没有本质提生,可能就是花活罢了,但是还是给出代码:

#include <stdio.h>
#include <time.h>
#define N 10void CockSort(int * a, int n);
void Print(int * a, int n);int main(void)
{int i, a[N] = {0};srand((unsigned)time(NULL));for (i = 0; i < N; i ++)a[i] = rand() % 101;printf("Before sort:\n");Print(a, N);CockSort(a, N);printf("经过排序:\n");Print(a, N);}void CockSort(int * a, int n)
{int i, j, temp = 0;for (i = 0, j = 0; i < (n + 1) / 2; i ++){for (; j < n - i - 1; j ++){if(a[j] > a[j+1]){temp = a[j];a[j] = a[j+1];a[j+1] = temp;}}for(; j > i; j --){if(a[j] < a[j-1]){temp = a[j];a[j] = a[j-1];a[j-1] = temp;}}}return;
}void Print(int * a, int n)
{int i = 0;for (; i < n; i ++)printf("%d ", a[i]);printf("\n\n");return;
}

运行结果:

完结
TheEnd···

插入排序监视哨和鸡尾酒排序相关推荐

  1. 直接插入排序——监视哨的作用

    直接插入排序 从前往后依次将每一个元素插入到前面已排好的序列中,如当插入到arr[i]时,arr[0]至arr[i-1]已排好序了,将arr[i]与arr[0],arr[2],arr[2],-arr[ ...

  2. 数据结构上机——希尔排序(含监视哨版本)

    首先要明确一下什么是监视哨 这个词很容易望文生义 错误地认为是监视比较的值 查阅资料才发现 监视哨的意义是防止下标越界,提高速度 在插入排序中, 取用r[0]作为监视哨,就可以在循环中减少一次判断j& ...

  3. 顺序表的建立,插入,删除,二分(折半)查找,监视哨查找,冒泡排序,选择排序,直接插入排序

    数据结构课程中学的顺序表,在顺序表中进行删除,查找,排序. 第一次编辑,排版什么的可能有不对的地方,但是程序我跑过了,应该是没问题的,这个其实是我期末上机考试的题. 注释还蛮多的,所以我就直接把代码贴 ...

  4. 排序-----直接插入排序------带监视哨和不带监视哨

    源代码 public class Main {public static void main(String[] args) {int[] a={20,30,21,35,2,1};//insertSor ...

  5. C语言 希尔排序 使用监视哨

    文章目录 算法介绍 思想讲解 优点 代码 运行结果 算法介绍 希尔排序(Shell's Sort)是插入排序的一种又称"缩小增量排序"(Diminishing Increment ...

  6. 直接插入排序:监视哨的作用

    直接插入排序 从前往后依次将每一个元素插入到前面已排好的序列中,如当插入到arr[i]时,arr[0]至arr[i-1]已排好序了,将arr[i]与arr[0],arr[2],arr[2],-arr[ ...

  7. 直接排序三种方法参考——监视哨

    直接插入排序三种方法参考--监视哨 今天复习所学过的数据结构的排序和查找方法,下面是对直接插入排序的几种方法的具体代码和思路,可以当做参考,当然也是方便自己加强记忆.这里只是具体一些代码,https: ...

  8. JAVA堆排序有监视哨吗_数据结构-各类排序算法总结

    各类排序算法总结 一. 排序的基本概念 排序(Sorting)是计算机程序设计中的一种重要操作,其功能是对一个数据元素集合或序列重新排列成一个按数据元素某个项值有序的序列. 有 n 个记录的序列{R1 ...

  9. java-数组排序--冒泡排序、鸡尾酒排序、地精排序

    冒泡排序 冒泡排序的思想是,让依次数组中相邻的数进行比较,如果前一个数比后一个数大,则两数进行交换,大的数就会象泡泡一样慢慢浮在水面上了 见图解 稳定性:稳定 时间复杂度:O(n2) 1 public ...

最新文章

  1. 计算机网络本地连接被禁用说明什么,win10系统网络被禁用重新启用本地连接的设置技巧...
  2. git版本号管理工具的上手
  3. 机器人学习--自主移动机器人导论资料(附下载链接)
  4. python 下字符串格式时间比较
  5. vba 判断文本框内容是否为空_【VBA】 数据输入 Inputbox 基本语法
  6. 500 OOPS: cannot change directory”解决方法
  7. 杭电ACM 2017
  8. Docker 遇到swapon failed Operation not permitted
  9. C#开发笔记之05-迭代器中的状态机(State Machine)到底是什么?
  10. jQuery框架学习第七天:jQuery动画–jQuery让页面动起来!
  11. liunx下安装redis开启网络
  12. python:多维数组变一维数组
  13. 2022 Google翻译修复工具 V1.3 【谷歌浏览器无法翻译网页问题解决】
  14. 作为一个大学才开始入门学计算机编程的孩子想要的东西-----听我扯,你蛋疼,他菊紧,我开心...
  15. 什么是微信SCRM客服系统
  16. joc杂志影响因子2019_有机化学高档次杂志投稿之我见——JACS,Angew,OL等
  17. vc++实现avi文件的操作
  18. C#中Atan()与Atan2()
  19. Bootstrap简单网页制作
  20. 用TableView实现聊天对话框

热门文章

  1. 【财富空间】如何看待目前国内AI公司的估值?
  2. 如何快速优化手游性能问题?从UGUI优化说起
  3. jQuery MiniUI 快速入门:Hollo, world!(二)
  4. [MRCTF2020]keyboard
  5. qq 游戏计算机内存不足,腾讯手游助手内存不足如何处理?内存不足处理方法介绍...
  6. 远程控制软件如何实现两台电脑连接
  7. 【ARM】新唐NUC977移植WK2124驱动
  8. 1+X Web前端等级考证 | PHP 技术与应用(中级重点)
  9. 【Manual】Memory Cache Control
  10. nodejs express摸爬滚打篇:express中使用mysql