算法部分 排序算法整理 算法过程中细节的实现和理解(基础)

本文从基础出发复习排序算法,重点介绍了插入排序和冒泡排序的原理与实现。插入排序通过逐步将元素插入已排序部分来构建有序数组;冒泡排序通过不断交换相邻未排序元素来实现升序排列。通过对这两种算法的理解,有助于深入掌握其他排序算法。
摘要由CSDN通过智能技术生成

从基础开始进行排序算法复习

学的东西不用就忘,到现在排序算法记得不是很清楚,捡起来复习。从底层和原理复习,加深记忆。

0.数组

对数组结构元素进行排序。C++中的数组这一数据结构特点:下标访问;连续存储;固定长度

1.插入排序

举个比较好理解的例子:现实生活中打牌的时候,拿好一些未排序的牌在手上之后,把牌整理成从左到右依次增大。当然啦,在现实生活中我们是随意整理,只要最后把牌升序整理好就行,但是算法过程要从计算机的角度来思考,计算机只能重复地进行有规律的顺序操作。所以先整理出一个计算机能做到的机械性做法,在使用算法来实现它。

①从最左边开始,向右,第二张牌与第一张比较,如果第二张牌更小,则交换;

②第三张牌与前面的2张牌都比较,把第三张牌放到合适的位置:第三张牌与第二张比较,第三张更小则交换;第三张牌再与第一张牌比较,更小则交换。

③往后以此类推,直到最后一个数组元素。

从这三个步骤得到伪代码结构:首先是一个for循环,循环数组的第二个元素到最后一个元素,这个循环是选出要进行插入的元素 a [ i ] ; 在循环内还要有一个for循环,这个循环遍历的是 a [ i ] 将要插入的部分的所有元素,是  a [ i ] 原来位置之前的所有元素。

简化后的规则为:1.从第2个数(下标为1)开始到最后一个数,每一个数都与前面的所有数进行比较,即 i = 1~array.length() ; 2. 第 i 个数要进行比较的数的下标为  j = 0 ~ i -1 

如图:

总体来看,插入排序在数组中维持两个部分: 已经排好序的部分( i 之前的部分)和未进行排序的部分( i 和 i 后面的部分)。然后在循环地选择数组中的每个元素,通过与已经排好序的部分比较,把选择出来的数加入到已经排好序的部分中。通过这样的顺序选择,使排好序的元素越来越多,完成整个数组的排序。

代码如下(以长度为10的数组进行示范):

void InsertSort(int array[10]){
	int temp;
	for(int i=1;i<10;i++){
		for(int j=0; j <= i-1; j++){			
			if(array[i] < array[j]){
				temp = array[j];
				array[j] = array[i];
				array[i] = temp;
			}
		}
	}
}

2.冒泡排序

回忆一下最长公共子序列算法,是先比较最后的元素是否相同,如果相同,就作为公共子序列的一部分,如果不同,就分支再比较选择。当然啦,最长公共子序列算法是要比冒泡排序算法复杂得多的,还包含了递归和动态规划等思想。

冒泡排序算法与它的相同之处在于,先选出最后一个元素,进行循环,就能得到有序的数组。即如果是在升序排序中,每次都找到最大的元素,然后将最大的元素移动到数组最末端,进行一次循环后,最末的数组元素已经确定,此时再对出最末元素以外的元素( a [ n-1 ] )进行相同的操作,以此类推,就得到有序的数组。

关于排序算法其实理解了一个算法之后,其他的就很好理解了,所以在此就不作图了,可以在纸上随意画出一个模型加深理解,直接贴排序函数代码

void BubbleSort(int a[10],int len){
	int temp;	
	for(int i=len;i>=0;i--){
		// - last e    repeat		 
		for(int j=0;j<10;j++){
			if(a[j] > a[j+1]){
				//exchange
				temp = a[j];
				a[j] = a[j+1];
				a[j+1] = temp;
			
			}			
		}		
	}		
}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值