排序及查找----[(冒泡,快速)(拉格朗日,二分)]

代码展示:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Threading.Tasks;
  6 
  7 namespace paixu
  8 {
  9     class Program
 10     {
 11         static void Main()
 12         {
 13             int[] Array = { 1, 45, 8, 65, 478, 5, 56, 1, 0, -87, 878, 4, 64 };
 14 
 15             MaoPao(Array);
 16              Console.WriteLine("-----------冒泡--------------------------");
 17             KuaiSu01(Array);
 18              Console.WriteLine("-----------快速法(一)-------------------");            
 19              KuaiSu02(Array);
 20              Console.WriteLine("-----------快速法(二)-------------------");
 21             
 22 string x = "=========以下两种查找方法必须要有序数组=============";
 23 
 24              LaGeLangRi(Array, 878);
 25              Console.WriteLine("-----------拉格朗日插值查找法-----------");           
 26             Dichotomy(Array,0);
 27              Console.WriteLine("-----------二分法查找法-----------------");
 28             
 29              Console.Read();
 30         }
 31 //---------------------冒泡------------------------------------------------
 32         public static void MaoPao( int [] array) 
 33         {
 34             int temp = 0;
 35             for (int i = 0; i < array.Length-1; i++)
 36             {
 37                 for (int j = 0; j < array.Length - 1 - i; j++)
 38                 {
 39                     if (array[j] > array[j + 1])
 40                     {
 41                         temp = array[j];
 42                         array[j] = array[j + 1];
 43                         array[j + 1] = temp;                    
 44                     }               
 45                 }
 46             }
 47             foreach (int  item in array)
 48             {
 49                 Console.WriteLine(item);
 50             }
 51         }
 52 //---------------------快速(法一)------------------------------------------------------
 53         public static void KuaiSu01( int [] array)
 54         {
 55             List <int> list = array.ToList();
 56             QuickSort(list, 0, array.Length - 1);
 57             foreach (int  i in list)
 58             {
 59                 Console.WriteLine(i.ToString());
 60             }
 61         }
 62         private static int Division(List<int> list, int left, int right)//获取按枢轴值左右分流后枢轴的位置
 63         {
 64             while (left < right)
 65             {
 66                 int num = list[left]; //将首元素作为枢轴
 67                 if (num > list[left + 1])
 68                 {
 69                     list[left] = list[left + 1];
 70                     list[left + 1] = num;
 71                     left++;
 72                 }
 73                 else
 74                 {
 75                     int temp = list[right];
 76                     list[right] = list[left + 1];
 77                     list[left + 1] = temp;
 78                     right--;
 79                 }  
 80             }
 81             return left; //指向的此时枢轴的位置
 82         }
 83         private static void QuickSort(List<int> list, int left, int right)//递归进行操作
 84         {
 85             if (left < right)
 86             {
 87                 int i = Division(list, left, right);
 88                 //对枢轴的左边部分进行排序
 89                 QuickSort(list, i + 1, right);
 90                 //对枢轴的右边部分进行排序
 91                 QuickSort(list, left, i - 1);
 92             }
 93         }
 94 //---------------------快速(法二)-------------------------------------------------------
 95         public static void KuaiSu02(int[] array)
 96         {
 97           
 98             Sort(array, 0, array.Length);
 99             foreach (int i in array)
100             {
101                 Console.WriteLine(i.ToString());
102             }
103         }
104        public static void Sort(int[] nums, int left, int right)//数组,起始下标,数组长度
105         {
106             if (left < right)    //直到排序的左右区间只剩一个值
107             {
108                 int i = left;
109                 int j = right - 1;
110                 int middle = nums[(left + right) / 2];
111                 while (true)
112                 {
113                     while (i < right && nums[i] < middle) { i++; }; 
114                        //在middle左边找到一个比middle小的值
115                     while (j > 0 && nums[j] > middle) { j--; };   
116                           //在middle右边找到一个比middle大的值
117                     if (i == j) {break; } 
118                //当i=j时,middle左边都是比middle小的数,右边都是比middle大的;跳出循环
119                     nums[i] = nums[i] + nums[j];
120                     nums[j] = nums[i] - nums[j];
121                     nums[i] = nums[i] - nums[j];     //两个值交换位置
122                     if (nums[i] == nums[j]) { j--; }
123                        //如果两个值相等,且等于middle,为避免进入死循环,j--
124                 }
125                 Sort(nums, left, i);           //递归 
126                 Sort(nums, i + 1, right);
127             }
128         }
129 
130        //--------拉格朗日插值查找法(相同元素返回第一个元素下标)-----------------         
131        public static int LaGeLangRi(int[] a, int key)
132         {
133              int tou=0;
134             int wei=a.Length-1;
135             int  zhong =0;
136             while(tou<=wei)
137             {
138                 zhong = tou + (wei - tou) * (key - a[tou]) / (a[wei] - a[tou]);
139                 if (key == a[zhong]) { break; }
140                 else if (key > a[zhong]) { tou = zhong + 1; }
141                 else{wei=zhong-1;}
142             }
143             Console.Write(key); Console.WriteLine("---->对应的下标是:" + zhong);           
144             return zhong;
145             
146         }
147 //-------------------二分查找法(相同元素返回第一个元素下标)------------------------
148        public static void Dichotomy(int[] array,int item)
149        {          
150            int x = BinarySearch(array, 0, array.Length - 1, item);
151            Console.Write(item); Console.WriteLine("---->对应的下标是:" + x);                
152        } 
153         public  static int BinarySearch(int[] arr, int low, int high, int key)
154         {
155             int mid = (low + high) / 2;
156             if (low > high){return -1;}               
157             else
158             {
159                 if (arr[mid] == key){ return mid;}                   
160                 else if (arr[mid] > key){return BinarySearch(arr, low, mid - 1, key);}                    
161                 else{return BinarySearch(arr, mid + 1, high, key);}                    
162             }
163             
164         }
165     }
166 }

备注:

排序的话,快速排序效率是较高的.

转载于:https://www.cnblogs.com/Future-Better/p/9887524.html

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

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

相关文章

因果作用推断、因果网络学习及其他

来源&#xff1a;久章智能 未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#xff1b;开展互联网&#xff08;城市&#xff09;云脑研究计划&#xff0c;构建互联网&#xff08;城市&#xff09;云脑技术和企业图谱…

学习《图解HTTP》有感

HTTP协议的出现主要是为了解决文本传输的难题&#xff08;大家互相共享文件没有一个规范&#xff09;&#xff0c;最初的设计理念是&#xff1a;借助多文档之间的关联形成超文本&#xff0c;成为相互参阅的WWW&#xff08;万维网&#xff09; 计算机和网络设备要通信&#xff…

mysql解决select * from 表名 (where + 约束条件为空)

mysql解决select * from 表名 (where 约束条件为空)&#xff0c;示例如下&#xff1a; SELECT * from tableName WHERE name is NULL; 从 tableName 表中查询 name 字段为空的记录。转载于:https://www.cnblogs.com/zrmw/p/9887655.html

通信人工智能的下一个十年(上)

来源&#xff1a;电信科学欧阳晔1, 王立磊1, 杨爱东1, 马利克萨哈2, 大卫贝兰格3,4, 高同庆5, 韦乐平6, 张亚勤71 亚信科技&#xff08;中国&#xff09;有限公司&#xff0c;北京 1001932 美国威瑞森电信公司&#xff0c;美国 纽约 100363 美国电话电报公司&#xff0c;美国 得…

[Swift]LeetCode19. 删除链表的倒数第N个节点 | Remove Nth Node From End of List

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号&#xff1a;山青咏芝&#xff08;shanqingyongzhi&#xff09;➤博客园地址&#xff1a;山青咏芝&#xff08;https://www.cnblogs.com/strengthen/&#xff09;➤GitHub地址&a…

CAS

cas&#xff1a;Compare and Swap&#xff0c;即比较再交换。 对CAS的理解&#xff0c;CAS是一种无锁算法&#xff0c;CAS有3个操作数&#xff0c;内存值V&#xff0c;旧的预期值A&#xff0c;要修改的新值B。当且仅当预期值A和内存值V相同时&#xff0c;将内存值V修改为B&…

大脑使用交叉存储,来区分现在和过去

来源&#xff1a;混沌巡洋舰在每一个清醒的时刻&#xff0c;人类和其他动物必须在我们对过去的记忆和对现在的意识两者中保持平衡。我们必须吸收关于周围世界的新的感官信息&#xff0c;同时保持对早期观察或事件的短期记忆。我们理解周围环境、学习、行动和思考的能力都依赖于…

CONTINUE...? ZOJ - 4033

CONTINUE...? ZOJ - 4033 题解&#xff1a;先计算一下总数sum是否是偶数&#xff0c;如果不是则不能分出来&#xff0c;如果是则从后面开始分&#xff0c;先把人分到1、3组&#xff0c;分完sum / 2这些人&#xff0c;如果恰好能够分成零&#xff0c;那么剩下前面的都分到2、4组…

对象在内存中的存储布局

对象头包含&#xff1a; markword(和锁相关的信息) 8字节 class pointer(说明对象属于哪个类)&#xff0c;jvm指针八字节&#xff0c;但是默认压缩&#xff0c;所有4个字节 对象体包含&#xff1a; instance word实例数据(例如int&#xff0c;这就占四个字节&#xff0c;l…

用研究新范式破解生命科学难题

来源&#xff1a;中国科学报 作者&#xff1a;丛斌&#xff08;中国工程院士&#xff09;采访整理&#xff1a;张思玮&#xff08;本报记者&#xff09;当今&#xff0c;世界科技正处于重大变革前夕。各领域科学家们一直积极地探索物质本质、宇宙本源、生命本质&#xff0c;并迫…

synchronized与volatile

synchronized实现过程&#xff1a; 1.Java代码&#xff1a;synchronized 2.字节码层级&#xff1a;monitorenter&#xff0c;monitorexit 3.执行过程中自动升级&#xff08;偏向->自旋->重量级锁&#xff09; 4.cpu汇编层级:lock comxchg 上图为双核cpu的内部构造&am…

redis 字符串数据(string)

Redis 字符串数据类型的相关命令用于管理 redis 字符串值&#xff0c;基本语法如下&#xff1a; 语法 redis 127.0.0.1:6379> COMMAND KEY_NAME 实例 redis 127.0.0.1:6379> SET runoobkey redis OK redis 127.0.0.1:6379> GET runoobkey "redis" 在以上实例…

AI 技术与人类主体想象 ——基于人工直觉在线讨论的研究

来源&#xff1a; 人工智能哲学探索作者&#xff1a;雅克布约翰森&#xff08;英国圣玛丽大学&#xff09; 王鑫&#xff08;辽宁大学&#xff09;一、引言:AI、神经形态硬件、人工直觉AI 在媒体上的讨论越来越多,很多广为流行的专业网站上的相关探讨涵盖了 AI 发展的最新趋势和…

Java四种引用

强引用&#xff1a;没有使用时调用System.gc()会回收 eg&#xff1a;M m new M(); mnull;System.gc(); 软引用&#xff1a;内存不够时就回收 作用&#xff1a;一般使用在缓存时&#xff0c;比如把一些图片存储&#xff0c;内存不够时就自动回收 弱引用&#xff1a; 垃圾回…

js 控制页面跳转的5种方法

js 控制页面跳转的5种方法 编程式导航&#xff1a; 点击跳转路由&#xff0c;称编程式导航&#xff0c;用js编写代码跳转。 History是bom中的History.back是回退一页Histiory.go(1)前进一页History.go(-1)后退一页HandleClick(){Console.log(this.props.history);}This.props.h…

永动机与热力学定律

来源&#xff1a;力学酒吧 撰文&#xff1a;张伟伟热力学三大定律分别为能量守恒、熵增定律和绝对零度无法到达&#xff0c;人们对热力学定律的认识也是纠正永动机思想的过程&#xff0c;是人类“美好思想”不断“碰壁”的过程&#xff0c;这些“碰壁”对于个人成长有着深刻的启…

浅析ThreadLocal

线程本地变量 每个线程独立拥有&#xff0c;线程存在&#xff0c;ThreadLocal就一直存在。 使用场景&#xff1a;spring 事务 里面有m方法&#xff0c;m调用了m1&#xff0c;m2&#xff0c;比如m1&#xff0c;m2都去访问数据库 如果分别建立两个数据库连接&#xff0c;事务…

T-SQL删除存储过程

使用T-SQL脚本删除存储过程 语法&#xff1a; --声明数据库引用use 数据库名称;go --判断是否存在存储过程&#xff0c;如果存在则删除if exists(select * from sys.procedures where name存储过程名称)drop { proc | procedure } [架构名][.][存储过程名称];go 示例&#xff1…

工业机器人技术全解析,值得收藏!

来源&#xff1a;先进制造业一、工业机器人的发展背景1920年&#xff0c;捷克剧作家卡里洛奇别克在其科幻剧本《罗萨姆万能机器人制造公司》&#xff08;Rossums Universal Robots&#xff09;首次使用了ROBOT这个名词&#xff0c;之后便成为机器人的代名词。1938年3月&#xf…

Leetcode--781.森林中的兔子

森林中&#xff0c;每个兔子都有颜色。其中一些兔子&#xff08;可能是全部&#xff09;告诉你还有多少其他的兔子和自己有相同的颜色。我们将这些回答放在 answers 数组里。 返回森林中兔子的最少数量。 示例: 输入: answers [1, 1, 2] 输出: 5 解释: 两只回答了 "1&q…