简单的排序算法有哪些,简单的排序算法题
现在IT行业不像以前那么好混了,从业人员太多,导致初级程序员过剩。这间接导致公司的招聘门槛更高,需要程序员掌握越来越多的知识。
如何解决写爬虫IP受阻的问题?立即使用。
算法也是一个争论已久的话题。程序员应该掌握算法吗?不同的人有不同的答案,但其实很多公司对算法都有一定的要求,有的公司在面试的时候直接让面试官写算法题。这对程序员的技术要求提出了很大的考验,所以面对当今的环境,我们必须掌握算法,才能在未来的工作中占据一席之地。
接下来我简单介绍几种排序算法,希望对你有帮助。
冒泡排序
冒泡排序是一种简单的排序算法。
它重复地访问要排序的元素列表,依次比较两个相邻的元素,并且如果它们的顺序(例如,从最大到最小,从A到Z的首字母)是错误的,则交换它们。重复访问元素的工作,直到没有相邻的元素需要交换,也就是说,元素列已经排序。
这种算法的名字来源于较大的元素会通过交换慢慢“浮”到数列的顶端(按升序或降序),就像碳酸饮料中二氧化碳的气泡最终会浮到顶端一样,因此得名“气泡排序”。
演示:
代码如下:
@测试
public void bubbleSort() {
int[] arr={ 3,44,38,5,47,15,36,26,27,2,46,4,19,50,48 };
//计算比较的次数
int count=0;
//第一轮比较
for(int I=0;I arr . length-1;i ) {
布尔标志=真;
//第二轮比较
for(int j=0;j排列长度-1-I;j ) {
if (arr[j] arr[j 1]) {
//交换位置
int temp=arr[j];
arr[j]=arr[j 1];
arr[j 1]=temp;
}
数数;
}
}
system . out . println(arrays . tostring(arr));
System.out.println(总比较:计数次);
}运行结果:
[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]
总比较:105乘以选择排序
选择排序是一个简单直观的排序算法。其工作原理是:从第一次要排序的数据元素中选择最小(或最大)的元素,存储在序列的开头,然后从剩余的未排序元素中找出最小(或最大)的元素,再放在排序后的序列的末尾。依此类推,直到要排序的所有数据元素的数量为零。选择是一种不稳定的排序方法。
演示:
代码如下:
@测试
公共void SelectionSort() {
int[] arr={ 3,44,38,5,47,15,36,26,27,2,46,4,19,50,48 };
for(int I=0;I arr . length-1;i ) {
int index=I;
for(int j=1i;j排列长度;j ) {
if (arr[j] arr[index]) {
index=j;//保存最小元素的下标
}
}
//此时已经找到最小元素的下标
//将最小的元素与前一个元素交换
int temp=arr[index];
arr[index]=arr[I];
arr[I]=temp;
}
system . out . println(arrays . tostring(arr));
}运行结果:
[2,3,4,5,15,19,26,27,36,38,44,46,47,48,50]的实现也很简单。首先在外循环中定义一个索引变量来存储I的值,这是为了避免重复比较,因为每一轮比较之后,第一个I元素就是后面的比较都是基于索引位置的元素。如果比较后索引位置的元素是最小的,就不需要交换了,就可以保持不动了。如果找到比索引位置的元素小的元素,则将该元素的索引赋给index,然后继续比较,直到比较完成。比较后得到的索引是数组中的最小值,所以只需要将索引位置的元素与I位置的元素交换即可。
插入排序
插入排序是一种简单、直观且稳定的排序算法。如果有一个有序的数据序列,需要在有序的数据序列中插入一个数,但插入后数据序列仍然是有序的,那么就要使用一种新的排序方法,——插入排序法。插入排序的基本操作是将一个数据插入到有序数据中,从而得到一个数字加1的新的有序数据。该算法适用于对少量数据进行排序,其时间复杂度为O (n 2,是一种稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含数组的所有元素,除了最后一个元素(数组多了一个空间可以插入),第二部分只包含这个元素(即要插入的元素)。第一部分排序后,将最后一个元素插入排序后的第一部分。
插入的基本思想是:在每一步将一条待排序的记录按照其键值插入到之前排序的数组中的适当位置,直到所有记录都被插入。
演示:
代码如下:
@测试
public void InsertionSort() {
int[] arr={ 3,44,38,5,47,15,36,26,27,2,46,4,19,50,48 };
for(int I=1;长度;i ) {
//定义要插入的数字
int insert value=arr[I];
//找到要插入的数字的前一个数字的下标
int insert index=I-1;
while(insert index=0 insert value arr[insert index]){
arr[insert index 1]=arr[insert index];
insert index-;
}
arr[insert index 1]=insert value;
}
system . out . println(arrays . tostring(arr));
}运行结果:
[2,3,4,5,15,19,26,27,36,38,44,46,47,48,50]所以在这里,因为我们不确定数组的元素,所以只能把数组的第一个元素看作一个有序序列,所以我们需要从数组的第二个元素开始寻找插入位置。于是外循环从1开始,然后保存arr[i],也就是当前的第二个元素,然后找到要插入的元素的前一个元素索引,也就是i-1。这时候通过while循环比较一下。
当insertIndex小于0时,应该退出循环,因为它已经与前面的所有元素进行了比较。在比较的过程中,如果要插入的元素小于前一个元素,则前一个元素会向后移动,即前一个元素的值会直接赋给要插入的元素的位置。因为要插入的元素在开始时已经保存,所以只需要将要插入的元素的值赋给它的前一个元素。因为insertIndex在while循环中递减,所以它的前一个元素下标应该是insertIndex 1。但是如果要插入的元素的值大于前一个元素,就不会进入while循环,这样insertIndex 1之后的位置还是自己的位置,所以赋值之后值不会改变,后面的操作以此类推。以上是简单排序算法的细节。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。