排序(Sort)--【一】

       排序,对于大家再熟悉不过了吧。我们之前在学习c语言的时候接触过的冒泡排序,选择排序等。今天给大家介绍两种新的排序。

1、直接插入排序


升序排列:将第一个数确定好,从下标为1的数开始插入,如果插入的数比前一个数大,就插入到前一个数后的位置。否则,将前一个数的位置后移,再与再往前的数比较,依次类推。

时间复杂度为:O(N*N)         最好情况:O(N)

主要实现代码(vs2013):

	#pragma once#include<iostream>using namespace std;void InsertSort(int *a,size_t size){for(size_t i = 1; i < size; ++i){int end = i-1;int tmp = a[i];while(end >= 0){if(tmp < a[end]) //升序  //if(tmp > a[end]) //降序{a[end+1] = a[end];--end;}else{break;}}a[end+1] = tmp;}}void Display(int *a,size_t size){for(size_t i = 0; i < size; ++i){cout<<a[i]<<" ";}cout<<endl;}void TestInsert(){int a[] = {2,5,4,9,3,6,8,7,1,0};size_t size = sizeof(a)/sizeof(a[0]);InsertSort(a,size);Display(a,size);}

运行结果:



2、希尔排序

       当在插入排序中,数据特别多时,且不是有序的。这时采用插入排序就特别的慢。尤其是对于升序情况,所给的数据是降序,那么就需要每次挪动数据。这就显得效率比较低了。于是引入了希尔排序,将它们先排列的接近有序,再进行插入排序就容易多了。


主要实现代码(vs2013):

void ShellSort(int* a,size_t size)
{int gap = size;int end = 0;int tmp = 0;while(gap > 1){gap = gap/3+1;for(size_t i = gap; i < size; ++i){end = i-gap;tmp = a[i];while(end >= 0){if(tmp > a[end])  //降序   //if(tmp < a[end]) 升序{a[end+gap] = a[end];end -= gap;}elsebreak;}a[end+gap] = tmp;}}
}void Display(int *a,size_t size)
{for(size_t i = 0; i < size; ++i){cout<<a[i]<<" ";}cout<<endl;
}void TestInsert()
{int a[] = {0,1,2,3,4,5,6,7,8,9};size_t size = sizeof(a)/sizeof(a[0]);ShellSort(a,size);Display(a,size);
}

运行结果:




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382757.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用python os.system 执行 批处理的时候, 出现的一些问题

如果 在一个py文件里面 , 假设用 三条语句 os.system(a.bat) os.system(b.bat) os.system(c.bat)这样的话 只会最后一条生效.

wait()和waitpid()的参数解析

进程的等待 #include <sys/types.h> #include <sys/wait.h> wait(),waitpid()区别&#xff1a; 在一个子进程终止前&#xff0c;wait使其调用者阻塞&#xff0c;而waitpid有一个选项&#xff0c;可使调用者不阻塞;waitpid()并不等待在其调用之后的第一个终止的…

快速排序--全集

快速排序&#xff1a;一听名字就知道这种排序很快的&#xff0c;是吧&#xff1f;没错&#xff0c;它是一种效率比较高的排序算法。 快速排序采用的是分治的思想。 比如&#xff0c;将一串数中的一个元素作为基准&#xff0c;然后将比它小的数排在它的左边&#xff0c;比它大…

task_struct结构体查找

网上有很多解析task_struct结构体的文章&#xff0c;可是都没有说这个结构体到底在哪里&#xff1f; 这个结构体位于头文件 shced.h cd / find -name sched.h 显示结果如下 注意只有 位于内核中的include 才是正确的。 /usr/src/kernels/2.6.32-431.el6.i686/include/linux…

使用python 创建快捷方式

import os import pythoncom from win32com.shell import shell from win32com.shell import shellcondef set_shortcut(): # 如无需特别设置图标&#xff0c;则可去掉iconname参数try:filename r"D:\AppServ\timer\win_cron_zq\timer.exe" # 要创建快捷方式的文件…

python 各个模块的简单介绍 转载

转自 https://www.jianshu.com/p/f8c43e25c02e

闹钟函数alarm()的解释与实践

alarm 定义 也称为闹钟函数&#xff0c;它可以在进程中设置一个定时器&#xff0c;当定时器指定的时间到时&#xff0c;它向进程发送SIGALRM信号。可以设置忽略或者不捕获此信号&#xff0c;如果采用默认方式其动作是终止调用该alarm函数的进程。 #include "head.h&quo…

Linux下如何设置权限让用户只删除自己的文件(粘滞位)

之前我们知道如何针对用户和用户组来设置文件权限。通常是用三个八进制来设置权限的&#xff0c;这里我要说的是&#xff0c;其实是由四个八进制表示的。其中第一个八进制我们通常是忽略的。第二个到第四个是对应于SUID,SGID,sticky-bit。 SUID&#xff1a;设置了SUID 位的文件…

CentOS安装yum 镜像 举例阿里云镜像

如何安装yum 镜像 CentOS 1、备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2、下载新的CentOS-Base.repo 到/etc/yum.repos.d/ CentOS 5 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.r…

python在ubuntu执行sh脚本,提示权限不够的解决方法, 转载

https://blog.csdn.net/weixin_40320794/article/details/81772194

Vim简单配置

vim配置&#xff1a; &#xff08;在Centos6.5下配置vim&#xff09; 1.找到用户的主工作目录&#xff0c;ls看是否有.vimrc文件&#xff0c;有的话打开即可。没有的话自己touch一个。vim进入.vimrc中&#xff1a; set nu 设置行数 colorscheme desert syntax enabl…

运算符面试题(剑指offer,面试宝典,牛客网)

利用一个宏实现两个数的交换&#xff1f;不使用if,?,switch或者其他判断语句比较两个变量的大小&#xff1f;利用位运算实现加法&#xff1f;以下程序输出结果是&#xff1f;用位运算实现求平均数&#xff1f;不用循环判断一个数是不是2的N次方&#xff1f; 利用一个宏实现两个…

js 出现 replace 无法完全替换 指定字符串的时候的解决办法

/{/g 通过这种方式替换掉 replace( /这里填写需要被替换的字符串/g , "");

[WPS笔试题]实现栈的push,pop,max且时间复杂度为O(1)

今天做了一下WPS的笔试题&#xff0c;遇到了一道关于栈的题&#xff0c;觉得挺有意思的&#xff0c;就写篇博客分享一下吧~~ 题目要求&#xff1a;要求实现栈的数据结构&#xff0c;在该类型中实现一个能够得到栈的最大元素的max函数&#xff0c;在该栈中&#xff0c;调用max,…

MarkDown生成目录索引

123 在第一行开头写[TOC] 必须是第一行&#xff0c;不可以在前面加别的东西。 1 2 3

ubuntu 如何用root身份进行登录

公司有个小项目, 需要用python调用 sh脚本来执行一些东西, 执行脚本的时候需要输入密码 类似 sudo S paaswd 脚本, 但是给客户部署的话, 再让客户客户 保存密码到配置文件, 就显得麻烦, 就想到用root方式去登陆系统, 结果用了网上的方法, 还是登陆不进去, 最后结合简书的一个方…

[剑指Offer]替换空格

今天看题的时候&#xff0c;遇到一个替换空格的题目&#xff0c;分析一下哈。 题目要求&#xff1a;把字符串中的每个空格替换成“%20”。例如输入“we are happy”&#xff0c;则输出“we%20are%20happy”。 解题思路&#xff1a;我们首先想到的是&#xff1a;移位思想。遇到…

C语言关键字 ISO/ANSI C90 C99 C11

面试考点 https://blog.csdn.net/csdn_kou/article/details/81113215 * 有的常用的我们都不知道是关键字&#xff0c;比如sizeof.这是面试中的考点&#xff0c;要注意。 * 同时当回答C语言中有多少关键字时&#xff0c;要回答前题条件&#xff0c;时针对哪一个版本

vm15 安装 mac虚拟机的过程 转载的

https://blog.csdn.net/weixin_43299649/article/details/82881567

task_struct解析

task_struct是Linux内核的一种数据结构&#xff0c;它用task_struct结构体来描述进程的信息。下面来剖析一下进程中保存的主要的信息有哪些&#xff1f; struct task_struct {//进程的运行时状态volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */void …