eq值 推荐算法_C++实现十种排序算法

十种排序算法:

  • 选择排序
  • 插入排序
  • 冒泡排序
  • 希尔排序
  • 快速排序的三种实现方法
  • 归并排序
  • 堆排序(大顶堆)
  • 计数排序
  • 基数排序(待实现)
  • 桶排序(待实现)
#include <bits/stdc++.h>
using namespace std;
void MergeSubQ(int a[], int n, int p, int middle, int r);
int Partition01(int a[], int p, int r);
int Partition02(int a[], int p, int r);
int* Partition03(int a[], int p, int r);
void InitializeHeap(int a[], int n, int i);//选择排序 O(n^2)
void SelectSort(int a[], int n){for(int i=0; i<n-1; i++){int mmin=a[i];int index=i;for(int j=i+1; j<n; j++){if(a[j]<mmin){mmin=a[j];index=j;}}int temp = a[i];a[i] = a[index];a[index] = temp;}
}//冒泡排序  O(n^2)
void BubbleSort(int a[], int n){for(int i=0; i<n-1; i++)for(int j=0; j<n-i-1; j++){if(a[j]>a[j+1]){int temp = a[j];a[j] = a[j+1];a[j+1] = temp;}}}
//插入排序  O(n^2)
void InsertSort(int a[], int n){for(int i=0; i<n; i++){int num = a[i];int index = i-1;while(index>-1 && num<a[index]){a[index+1] = a[index];index--;}a[index+1] = num;}
}//希尔排序 O(n^1.3)
void ShellSort(int a[], int n){for(int interval=n/2; interval>=1; interval/=2){for(int i=interval; i<n; i++){int num = a[i];int index = i-interval;while(index>-1 && num<a[index]){a[index+interval] = a[index];index-=interval;}a[index+interval] = num;}}
}//归并排序
void MergeSort(int a[], int n, int p, int r){if(p<r){int middle = p+((r-p)>>1);//递归求解子问题MergeSort(a, n, p, middle);MergeSort(a, n, middle+1, r);//合并MergeSubQ(a, n, p, middle, r);}
}
void MergeSubQ(int a[], int n, int p, int middle, int r){int help[n];//辅助数组for(int i=0; i<n; i++)help[i] = a[i];int left = p;//左指针int right = middle+1;//右指针int index=p;//当前要放入的位置while(left<=middle && right<=r){if(help[left]<=help[right]){ //左指针指向的元素较小,插入到a中a[index++] = help[left];left++;}if(help[left]>help[right]){ //右指针指向的元素较小,插入到a中a[index++] = help[right];right++;}}while(left<=middle){ //左部分还有剩余,直接插入a的末尾a[index++]=help[left];left++;}
}
//快速排序
void QuickSort(int a[], int p, int r){if(p<r){//找到主元应在的位置int* b = Partition03(a, p, r);//递归求解主元的左部分和右部分QuickSort(a, p, b[0]-1);QuickSort(a, b[1]+1, r);}
}
int Partition01(int a[], int p, int r){ //单向扫描法int point = a[p]; //主元int scan = p+1; //扫描指针,指向主元后int bigger = r;  //指向末尾while(scan<bigger+1){if(a[scan]>point){ //扫描到了比主元大的元素int temp = a[scan]; //与bigger指向的后面的元素进行交换a[scan] = a[bigger];a[bigger] = temp;bigger--;}else //小于等于主元情况scan++;}a[p] = a[bigger]; //将主元放到正确位置a[bigger] = point;return bigger;
}
int Partition02(int a[], int p, int r){ //双指针int point = a[p];int left = p+1; //从左扫描int right = r;  //从右扫描while(left<=right){while(left<=r && a[left]<point){left++;}while(right>=p+1 && a[right]>point){right--;}if(left<=right){int temp = a[left];a[left] = a[right];a[right] = temp;}}a[p] = a[right];a[right] = point;return right;
}
int* Partition03(int a[], int p, int r){ //重复元素过多时int point = a[p];int scan = p+1;int eq = p+1; //找重复int bigger = r;int flag=false;while(scan<=bigger){if(a[scan]<point){if(flag){int temp = a[scan];a[scan] = a[eq];a[eq] = temp;eq++;}scan++;}else if(a[scan]==point){ //相当时,将eq指向第一个相等的元素if(!flag){eq = scan;flag=true;}scan++;}else{int temp = a[scan];a[scan] = a[bigger];a[bigger] = temp;bigger--;}}if(!flag)eq=bigger;a[p] = a[bigger]; //bigger最后指向的是主元的位置a[bigger] = point;int b[2] = {eq, bigger}; //返回两个值return b;
}
//堆排序
void HeapSort(int a[], int n){//初始化堆for(int x=n/2; x>=0; x--)InitializeHeap(a, n, x);//进行排序for(int x=n-1; x>=0; x--){int temp = a[0];a[0] = a[x];a[x] = temp;InitializeHeap(a, x, 0);}}
void InitializeHeap(int a[], int n, int i){int left = 2*i+1;int right = 2*i+2;int maxIndex = left;if(left>=n)return ;if(right>=n){maxIndex = left;}else{if(a[right]>a[left])maxIndex=right;}if(a[i]>=a[maxIndex])return ;int temp = a[i];a[i] = a[maxIndex];a[maxIndex] = temp;InitializeHeap(a, n, maxIndex);
}
//基数排序
void BaseSort(int a[], int n){}//计数排序
void CountSort(int a[], int n){int mmax = a[0];for(int i=1; i<n; i++){ //找出数组中的最大值if(a[i]>mmax)mmax = a[i];}int help[mmax+1];memset(help, 0, sizeof(help));for(int i=0; i<n; i++){  //计数help[a[i]]++;}int index = 0;for(int i=1; i<mmax+1; i++){ //根据数的个数排序while(help[i]>0){a[index++] = i;help[i]--;}}
}//桶排序int main(){int a[10];srand((int)time(0));for(int i=0; i<10; i++)a[i] = rand() % 100;SelectSort(a, 10);BubbleSort(a, 10);InsertSort(a, 10);ShellSort(a, 10);MergeSort(a, 10, 0, 9);QuickSort(a, 0, 9);HeapSort(a, 10);CountSort(a, 10);for(int i=0; i<10; i++)cout<<a[i]<<" ";return 0;
}

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

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

相关文章

python读取tiff文件进行波段计算_python+tifffile之tiff文件读写方式

背景使用python操作一批同样分辨率的图片&#xff0c;合并为tiff格式的文件。由于opencv主要用于读取单帧的tiff文件&#xff0c;对多帧的文件支持并不好。通过搜索发现了两个比较有用的包&#xff1a;TiffCapture和tifffile。两者都可用pip安装。其中前者主要用于读取tiff文件…

java 线程停止在那个为止_java停止线程

本文将介绍jdk提供的api中停止线程的用法。停止一个线程意味着在一个线程执行完任务之前放弃当前的操作&#xff0c;停止一个线程可以使用Thread.stop()方法&#xff0c;但是做好不要使用它&#xff0c;它是后继jdk版本中废弃的或者将不能使用的方法&#xff0c;大多数停止一个…

java中的action是指什么_Struts2【开发Action】知识要点

前言前面Struts博文基本把Struts的配置信息讲解完了.....本博文主要讲解Struts对数据的处理Action开发的三种方式在第一次我们写开发步骤的时候&#xff0c;我们写的Action是继承着ActionSupport类的...为啥我们继承了ActionSupport类呢&#xff1f;下面我就会讲解到继承Action…

hql 查询条件 set集合_Redis从入门到深入-Sorted_set的value

1. sorted_set 类型新的存储需求&#xff0c;数据排序有利于数据的有效展示&#xff0c;需要提供一种可以根据自身特征进行排序的方式需要的存储结构&#xff1a;新的存储模型&#xff0c;可以保存可排序的数据sorted_set类型&#xff1a;在set的存储结构基础上添加可排序字段2…

pdm生成java_PowerDesigner通过SQL语句生成PDM文件并将name和comment进行互相转换

本篇文章主要介绍了PowerDesigner通过SQL语句生成PDM文件并将name和comment进行互相转换 超详细过程(图文)&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下1.软件准备软件&#xff1a;Navicat 11.1&#xff0c;Powerdesigner 152.安装步骤第一步&…

python逐步回归筛选变量_Python实现逐步回归(stepwise regression)

逐步回归的基本思想是将变量逐个引入模型&#xff0c;每引入一个解释变量后都要进行F检验&#xff0c;并对已经选入的解释变量逐个进行t检验&#xff0c;当原来引入的解释变量由于后面解释变量的引入变得不再显著时&#xff0c;则将其删除。以确保每次引入新的变量之前回归方程…

java里面如何加入高级的东西_如何成为一名Java高级架构师

近些年来互联网快速发展&#xff0c;现阶段的数据量和高并发的诉求&#xff0c;引起了不少传统的技术人员的力不从心&#xff0c;企业愈发关注到了系统架构的重要性&#xff0c;既需要掌控整体又需要洞悉局部瓶颈并依据具体的业务场景给出解决方案的领导型人物——Java架构师应…

mysql获取最好成绩对应数据的其他项_开源数据同步神器——canal

前言如今大型的IT系统中&#xff0c;都会使用分布式的方式&#xff0c;同时会有非常多的中间件&#xff0c;如redis、消息队列、大数据存储等&#xff0c;但是实际核心的数据存储依然是存储在数据库&#xff0c;作为使用最广泛的数据库&#xff0c;如何将mysql的数据与中间件的…

java怎么使用floor_Java floor() 方法

floor() 方法可对一个数进行下舍入&#xff0c;返回给定参数最大的整数&#xff0c;该整数小于或等给定的参数。语法该方法有以下几种语法格式&#xff1a;double floor(double d)double floor(float f)参数double 或 float 的原生数据类型。返回值返回 double 类型数组&#x…

python外部库是什么_如何使用Portable Python安装外部库?

由于管理员权限,我无法在我的机器上安装Python,但我成功下载/打开了Portable Python.我在Windows 7 64位机器上.我怎样才能使用以前的外部库,比如Numpy或Gmpy&#xff1f;解决方法:easy_install正在尝试从源代码安装. gmpy和gmpy2是C扩展,需要兼容的C编译器和其他库(GMP;以及gm…

java创建目录时带权限_java – 无法在外部存储中创建目录,尽管权限显然设置正确...

我有在我的清单文件中,但是尝试创建一个目录时我失败了Log.d(LOG_STRING, android.os.Environment.getExternalStorageState() );java.io.File folder new java.io.File(Environment.getExternalStorageDirectory() java.io.File.separator "test");boolean succe…

window访问不到linux的activemq_springboot整合开源项目测试拦截接口访问的频率

本节目标本篇文章主要是介绍以下springboot整合开源项目&#xff0c;实现反爬虫接口防刷的demo&#xff0c;额外的介绍一下axios的基本用法&#xff1b;所以本篇文章阅读起来相对轻松。OK&#xff0c;下面开始整合.引入项目依赖cn.keking.project kk-anti-reptile …

java 数据库外键查询_oracle中查询所有外键引用到某张表的记录

其实查找这篇文章 我主要用的sql 是这句 select * from user_cons_columns t where t.constraint_name like FK_CTS_CONT_REINS__CRR;起因&#xff1a;系统测试的时候发现如果某条记录已经被引用了&#xff0c;这个时候删除这条记录会引起数据不一致&#xff0c;系统会报错。…

sql server限制查询条数_18. Django 2.1.7 查询集 QuerySet

上一篇Django 2.1.7 模型 - 条件查询 F对象 Q对象 聚合查询讲述了关于Django模型的介绍F对象、Q对象、聚合查询等功能。不管什么查询&#xff0c;返回的结果都基本是查询集QuerySet&#xff0c;如下&#xff1a;In [16]: MiddlewareInfo.objects.all()Out[16]: 1)>, 2)>,…

python文件传输socket_树莓派采用socket方式文件传输(python)

两个树莓派&#xff0c;在同一个局域网内&#xff0c;传输文件&#xff0c;采用socket方式。client端代码&#xff1a;import socketimport osimport hashlibclient socket.socket() # 生成socket&#xff0c;连接serverip_port ("192.168.137.210",12346) # server…

java 过滤列表_Java 8 Stream过滤列表中列表的值

我有一个看起来如下的对象class MyObject {String type;List subTypes;}是否有可能,给定一个MyObject列表,使用Java 8流来过滤类型和子类型&#xff1f;到目前为止我有myObjects.stream().filter(t -> t.getType().equals(someotherType).collect(Collections.toList());但在…

python实现程序重启_python实现自动重启本程序的方法

#!/usr/local/bin/python#-*- coding: UTF-8 -*-##################################################################### python 自动重启本程序#####################################################################import os,time#def close():# print "程序重启&a…

java调用 restapi 乱码_Java HttpURLConnection模拟请求Rest接口解决中文乱码问题

public staticString PostRequest(String URL,String obj) {String jsonString"";try{//创建连接URL url newURL(URL);HttpURLConnection connection(HttpURLConnection) url.openConnection();connection.setDoOutput(true);connection.setDoInput(true);connectio…

python惰性求值的特点_C#教程之C#函数式编程中的惰性求值详解

https://www.xin3721.com/eschool/python.html惰性求值在开始介绍今天要讲的知识之前&#xff0c;我们想要理解严格求值策略和非严格求值策略之间的区别&#xff0c;这样我们才能够深有体会的明白为什么需要利用这个技术。首先需要说明的是C#语言小部分采用了非严格求值策略&am…

工厂模式java界面_java – 工厂模式动态方法

我正在努力了解工厂模式.如果有很多实现,那么我的工厂模式将会有很多如果还是开关的情况.而且每次我介绍一个新的实现,我应该更改我的工厂代码像下面的例子,如果让我们假设狗鸭正在实施宠物界面,如果许多动物实现宠物界面,我的工厂会很长时间,如果有其他的代码或开关案例,那么明…