排序算法-查找算法

排序算法

冒泡排序

  1. 从左向右扫描数据,选着最大的数据。
  2. 要点:比较相邻的两个数,如果左边的数大于右边的数就进行交换。

template<class T>

void BubbleSort(T *array, const int length)

{

         for (int i = 0; i <length-1; i++)

         {

                   for (int j = i+1; j <length; j++)

                   {

                            if (array[i]> array[j])

                                     std::swap(array[i], array[j]);

                   }

         }

}

选择排序

  1. 从当前未排序的整数中选着一个最小的整数,将他放在已排序按的整数列表的最后。
  2. 要点:选择排序最小的
  3. 冒泡排序与选择排序

template<class T>

void SelectSort(T *array, const int length)

{

         for (int i = 0; i < length; i++)

         {

                   int min = i;

                   for (int j = i + 1; j < length; j++)

                   {

                            if (array[j] < array[min])

                                     min = j;

                   }

                   std::swap(array[i], array[min]);

         }

}

 

 

 

查找算法

顺序查找

  1. 数据没排序,查找速度慢

template<class T>

int SequentSearch(T *array, const int length,const T x)

{

         int i;

         for (i = 0; i < length; i++)

         {

                   if (array[i] == x)

                            return i;

         }

         return -1;

}

二分查找

  1. 数据需要排序,查找速度快

template<class T>

int BinarySearch(T *array, const int length, const T x)

{

         int low, hight, mid;

         low = 0, hight = length - 1;

 

         while (low <= hight)

         {

                   mid = (low + hight) / 2;

                   if (array[mid] == x)

                            return mid;

                   else if (array[mid] < x)

                            low = mid + 1;

                   else if (array[mid] >x)

                            hight = mid - 1;

         }

         return -1;

}

 

 

 

 

递归算法

  1. 难点:多入口递归算法的实现,递归实现的代码都可以是使用使用循来实现,递归耗费内存,在自己调用自己是,是否应该加return,需要考虑,一般需要加上return。递归算法需要深入研究才能掌握。

递归二分查找算法

template<class T>

int Recursive_BinarySearch(T * array, const int length, const T x,const int left ,const int right)

{

         if (left <= right)

         {

                   int mid = (left + right) / 2;

                   if (x < array[mid])

                            return Recursive_BinarySearch(array, length, x, left, mid - 1);

                           // 注意函数前需要加一个return,没加return,结果不正确

                   else if(x > array[mid])

                            return Recursive_BinarySearch(array, length, x, mid+ 1, right);

                   else return mid;

         }

         return-1;

}

 

递归实现排列组合问题

template<class T>

void Permutations(T * array,int left,int right)

{

         if (left == right)

         {

                   for (int i = 0; i < right; i++)

                            cout << array[i];

                   cout << endl;

         }

         else

         {

                   for (int i = left; i < right; i++)

                   {

                            std::swap(array[left], array[i]);

                            Permutations(array,left+1,right);

                            std::swap(array[left], array[i]);

                   }

         }

}

#include<iostream>
using namespace std;//排序算法
template<class T> void BubbleSort(T *array, const int length);//冒泡
template<class T> void B_sort(T *array, const int length);
template<class T> void SelectSort(T *array, const int length);//选择//T *array,使用指针,速度快,传递的数数组的地址,T array[],这种写法为传值,需要大量复制数据//查找算法
template<class T> int SequentSearch(T *array, const int length, const T x);//顺序查找,没排序的数据
template<class T>int Recursive_BinarySearch(T *array, const int length, const T x,const int left=0,const int right=0);//递归二分查找,排序的数据
template<class T>int BinarySearch(T *array, const int length, const T x);//二分查找,排序的数据
template<class T>void Permutations(T *array,int left,int right);//实现数组中元素的所有组合
int main()
{double a[] = { 1.1,1.9,2.5,9.2,9.5,4.0,3.2,4.5,6.7,8.4 };BubbleSort(a, 10);		cout << "冒泡排序:" << endl;for (int i = 0; i < 10; i++){cout << a[i] << endl;}B_sort(a, 10);		cout << "冒泡排序:" << endl;for (int i = 0; i < 10; i++){cout << a[i] << endl;}int b[] = {5,6,1,4,8,3,6,7,2,9,0 };SelectSort(b, 10);		cout << "选择排序:" << endl;for (int i = 0; i < 10; i++){cout << b[i] << endl;}double x = 4.0;int i = SequentSearch(a, 10, x);if (i > 0){cout << "顺序查找:" << endl;	cout << i<<","<<a[i] << endl;}int y =8;int j = BinarySearch(b, 10,y);if (j> 0)cout << j<< "," << b[j] << endl;double z =5;int k = Recursive_BinarySearch(a, 10,z,0,10);if (k > 0){cout << "递归查找:" << endl;cout << k << "," << b[k] << endl;}char ch[] = { 'a','b','c' };cout << "字母组合:" << endl;Permutations(ch,0, 3);system("pause");return 0;
}template<class T> void BubbleSort(T *array, const int length)
{for (int i = 0; i < length; i++){for (int j = 0; j < length - 1 - i; j++){if(array[j]> array[j+1])std::swap(array[j],array[j+1]);}}
}template<class T> void B_sort(T *array, const int length)
{for (int i = 0; i <length-1; i++){for (int j = i+1; j <length; j++){if (array[i]> array[j])std::swap(array[i], array[j]);}}
}template<class T>
void SelectSort(T *array, const int length)
{for (int i = 0; i < length; i++){int min = i;for (int j = i + 1; j < length; j++){if (array[j] < array[min])min = j;}std::swap(array[i], array[min]);}
}template<class T>
int SequentSearch(T *array, const int length,const T x)
{int i;for (i = 0; i < length; i++){if (array[i] == x)return i;}return -1;
}template<class T>
int Recursive_BinarySearch(T * array, const int length, const T x,const int left ,const int right)
{if (left <= right){int mid = (left + right) / 2;if (x < array[mid])return Recursive_BinarySearch(array, length, x, left, mid - 1);// 注意函数前需要加一个return,没加return,结果不正确else if(x > array[mid])return Recursive_BinarySearch(array, length, x, mid+ 1, right);else return mid;}return-1;
}template<class T>
int BinarySearch(T *array, const int length, const T x)
{int low, hight, mid;low = 0, hight = length - 1;while (low <= hight){mid = (low + hight) / 2;if (array[mid] == x)return mid;else if (array[mid] < x)low = mid + 1;else if (array[mid] >x)hight = mid - 1;}return -1;
}template<class T>
void Permutations(T * array,int left,int right)
{if (left == right){for (int i = 0; i < right; i++)cout << array[i];cout << endl;}else{for (int i = left; i < right; i++){std::swap(array[left], array[i]);Permutations(array,left+1,right);std::swap(array[left], array[i]);}}
}

结果:

 

 

 

 

 

 

 

 

 

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

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

相关文章

当法律纽带变成“机器红线”,能让自动驾驶汽车更安全吗?

来源&#xff1a; 脑极体美国汽车协会(American Automobile Association, AAA)与哈佛大学的一项研究结果显示&#xff0c;高达77%的人表示担心自己与自动驾驶汽车共享道路的安全性&#xff0c;62%则担心自动驾驶汽车发生意外时的肇责归属。某种程度上来讲&#xff0c;这可以说是…

李联宁|量子计算机:技术路线、风险及战略投资

来源&#xff1a;《学术前沿》杂志2021年4月上&#xff08;微信有删节&#xff09;作者&#xff1a;西安交通大学城市学院教授 李联宁原文责编&#xff1a;桂琰新媒体责编&#xff1a;李思琪视觉&#xff1a;王洋图片来源&#xff1a;网络由于现有半导体微电子技术物理极限的原…

vs code 配置java

VS code 入门 Vs code 配置Java 首先到VS code官网下载VS code软件&#xff0c;打开界面如图&#xff1a; 下载安装好&#xff0c;打开界面如图(注下图已汉化)&#xff1a; 为了便于使用&#xff0c;我们先进行汉化&#xff0c;在最左边点击图1-1中的图标&#xff0c;出现如图…

四、HTTP控制器

1、控制器的作用&#xff1a;数据和视图之间的桥梁 2、控制器创建方法&#xff1a; &#xff08;1&#xff09;手动创建 <?php namespace App\Http\Controllers; class UserController extends Controller { public function showProfile($id) { return view(user.profile,…

机器人行业专利构建与维护刻不容缓,专利研发需下苦功!

来源&#xff1a;机器人大讲堂自我国加入世界贸易组织&#xff0c;已经近20年过去。但不可忽视的是&#xff0c;发达国家或地区利用其产业先发优势&#xff0c;也一直在知识产权和专利上&#xff0c;采用知识产权和专利贸易壁垒&#xff0c;限制我国企业参与国际市场竞争。机器…

java-弹簧布局(自适应窗口)

一、布局管理器 弹簧布局管理器以容器和组件的边缘为操作对象&#xff0c;通过组件与容器边缘以及组件与组件边缘建立约束(建立位置关系)&#xff0c;实现对组件的布局管理。主要通过函数putConstraint(Strting s1,Component c1,int len,Strting s2,Component c2);当s2在s1的北…

从1G到5G,从回顾过去到展望未来

来源&#xff1a;《从1G到5G&#xff1a;移动通信如何改变世界》 作者&#xff1a;王建宙始于20世纪80年代的蜂窝式移动通信&#xff0c;只用了30多年的时间&#xff0c;就实现了在全世界的普及。如今&#xff0c;手机是人们随身携带的使用频率最高的工具。手机改变了人类的沟…

重磅:国拨概算5.34亿!“新一代人工智能”重大项目项目申报指南发布

来源&#xff1a;brainnews各省、自治区、直辖市及计划单列市科技厅&#xff08;委、局&#xff09;&#xff0c;新疆生产建设兵团科技局&#xff0c;国务院各有关部门&#xff0c;各有关单位&#xff1a;为落实国务院印发的《新一代人工智能发展规划》总体部署&#xff0c;现根…

Idea中在代码顶部添加自定义作者和时间

一、在工具栏找到File>settings>Editor>File and Code Templates 二、选择右边的File Header,在编辑框中添加自定义信息&#xff0c;例如&#xff1a; 三、然后点击应用&#xff0c;保存就OK啦&#xff01; 转载于:https://www.cnblogs.com/HelloBigTable/p/10261145.…

MFC框架解析

通过上述方法&#xff0c;我们进行代码的编写&#xff0c;创建一个空项目&#xff0c;我们要编写MFC应有程序&#xff0c;因此设置项目的属性&#xff0c; 项目->属性->链接器->系统->子系统为&#xff1a;窗口 (/SUBSYSTEM:WINDOWS)&#xff0c;项目->属性-&g…

162年难题,黎曼猜想被印度数学家迎刃而解?克雷数研所发出质疑

来源 &#xff1a; 新智元黎曼猜想又被证明了&#xff1f;5年前&#xff0c;印度一名数学物理学家Kumar Easwaran声称自己证明了「黎曼猜想」&#xff01;他发表了一篇论文「The Final and Exhaustive Proof of the Riemann Hypothesis from First Principles」解释自己的发现&…

MFC的六大关键技术

//main.h头文件 #pragma once #include"a.h" class CShape { public:virtual CRuntimeClassTest* GetRuntimeClassTest() const;BOOL IsKindOf(const CRuntimeClassTest* pClass) const; public:static CRuntimeClassTest classCShape; };static char szCShape[] &q…

20210709未来智能实验室收录资料

整理&#xff1a;未来智能实验室1.加州理工博士&#xff1a;用概率模型解析大脑中的神经活动2.智能化战争的基本形态 3.联合全域指挥控制的人工智能生态系统| 新品推荐4.数字化转型白皮书&#xff1a;数智技术驱动智能制造&#xff0c;42页pdf5.2021综述论文《几何深…

HTTP的请求报文与响应报文

报文&#xff1a; 简单来说&#xff0c;报文就是也就是HTTP报文&#xff0c;作用是在各个系统之间进行和响应时用来交换与传输的数据单元&#xff0c;即站点一次性要发送的数据块&#xff0c;这些数据块以一些文本形式的元信息开头&#xff0c;这些信息描述了报文的内容及含义&…

MFC关键技术-动态创建

//a.h头文件 #pragma once #include"m.h" #include<iostream> using namespace std;class CShape;//类声明//RTTI结构体 struct CRuntimeClassTest {LPCSTR m_lpszClassName;int m_nObjectSize;UINT m_wSchema;CShape*(PASCAL*m_pfnCreateShape)();//PASCAL宏为…

谷歌利用人工智能设计的芯片揭示了智能的本质

来源&#xff1a;TechTalks 网站作者&#xff1a;Ben Dickson译者&#xff1a;Sambodhi策划&#xff1a;刘燕InfoQ 中文站曾经翻译并分享过《谷歌的深度学习在 AI 芯片中找到了一条关键路径》&#xff0c;该文介绍了 ZDNet 与谷歌大脑总监 Jeff Dean 谈到谷歌如何使用人工智能来…

MFC关键技术-永久保存机制

//Main.h文件 #pragma once #include<afxwin.h>class CEllipse :public CObject {DECLARE_SERIAL(CEllipse)private:double m_point; public:CEllipse(){}void Serialize(CArchive&); };//Main.cpp文件 #include"main.h"IMPLEMENT_SERIAL(CEllipse, CObjec…

2021世界人工智能大会最高奖项——卓越人工智能引领者奖(Super AI Leader,简称SAIL奖)在大会开幕式揭晓...

来源&#xff1a;AIII研究院备受全球人工智能界关注的2021世界人工智能大会最高奖项——卓越人工智能引领者奖&#xff08;Super AI Leader&#xff0c;简称SAIL奖&#xff09;今天在大会开幕式揭晓。获得2021 SAIL奖的是——利物浦大学机器人科学家、中科院上海微系统所免开颅…