算法与数据结构基础(三)插入排序、选择排序和冒泡排序的区别
来源:互联网 发布:mysql 如何使用 编辑:程序博客网 时间:2024/05/18 00:06
插入排序的原理:
始终定义第一个元素为有序的,将元素逐个插入到有序排列之中,其特点是要不断的移动数据,空出一个适当的位置,把待插入的元素放到里面去。插入排序的函数如下:
insertion_sort(int *arr,int len)
{
int i,j,tmp;
for(i=1;i<len;i++)
{
j=i-1;
tmp=arr[i];
while(j>=0&&arr[j]>tmp)
{
arr[j+1]=arr[j];
j--;
}
arr[j+1]=tmp;
}
}
其中,arr为要排序的数组,len为数组的长度,j为数组下标,tmp为定义的要插入的数。可以看到,在while循环中,不断的去比较待插入的值与有序队列的值,不断的去移动数据,最后找到合适的位置,插入数据。
选择排序的原理:
每次在无序队列中“选择”出最小值,放到有序队列的最后,并从无序队列中去除该值(具体实现略有区别)。代码如下:
selection_sort(int *arr, int n)
{
int i,j,min,temp;
for(i=0;i<n-1;i++)
{
min=i;
for(j=i+1;j<n;j++)
{
if(arr[j]<arr[min])
{
min=j;
}
}
}
可以看出,选择排序的特点就是每次选出最小的放到有序队列最后。当然,也可以选出最大值放到有序队列的最前。
冒泡排序的原理:
每次在无序队列里将相邻两个数依次进行比较,将小数调换到前面,逐次比较,直至将最大的数移到最后。最将剩下的N-1个数继续比较,将次大数移至倒数第二位。依此规律,直至比较结束。冒泡代码如下:
sort(int *arr,int n)
{
int i,j,t;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(arr[j]>arr[j+1])
{
t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
}
}
}
可以看到当把最大的数移至最后位置时,第二个for循环循环次数减一,即只比较最后位前的N-1位即可。
阅读全文
0 0
- 算法与数据结构基础(三)插入排序、选择排序和冒泡排序的区别
- 数据结构与算法之基础排序(冒泡/插入/选择)<十>
- 基础排序算法(冒泡排序、选择排序、插入排序)
- 三、数据结构与算法--排序(冒泡排序、选择排序)
- 算法系列(三)排序算法上篇--冒泡排序插入排序和选择排序
- 数据结构与算法(二)冒泡&&插入&&选择 简单排序
- 排序算法---基础算法(冒泡排序,快速排序,选择排序,直接插入排序,桶排序)
- 数据结构 三种简单的排序(插入、选择、冒泡)
- (三)算法--排序算法选择排序和冒泡排序
- 数据结构与算法 -- 普通链表的插入、冒泡排序、选择排序、计数排序(c++实现)
- 三种基础排序(冒泡、选择、插入排序)
- 数据结构与算法:七种排序算法总结(冒泡排序、选择排序、直接插入排序、希尔排序、堆排序、归并排序、快速排序)
- (九)数据结构之简单排序算法实现:冒泡排序、插入排序和选择排序
- [数据结构] 冒泡排序,插入排序,选择排序
- 【基础算法】选择排序与冒泡排序
- 【算法基础】冒泡、选择、插入排序(三种基本排序)
- 基础排序总结(冒泡排序、选择排序、插入排序)
- 排序的三种方式(冒泡,插入,和选择)
- 使用Opencv的python接口简单读取并显示图片
- UnityShader初级篇——透明度测试
- 虚拟现实(VR)技术与伦理
- 线程1
- 面试记录
- 算法与数据结构基础(三)插入排序、选择排序和冒泡排序的区别
- 实现基于静态数组的顺序表的基本操作
- 代码理解json.dumps(config, sort_keys=True, indent=4, separators=(',', ':')
- 互联网产品常用英语单词
- python正则表达式(二)
- Spring RMI java.rmi.NoSuchObjectException: no such object in table
- 用类描述计算机中CPU的速度和硬盘的容量。要求Java的应用程序有4个类,名字分别是PC、CPU、HardDisk和Test,其中Test是主类。
- SpringMVC基础(一)
- 线程2