三种简单排序方式的总结

三种简单的排序通常是指:直接插入排序、冒泡排序、简单选择排序,这三种方式排序效率都非常的低因此称他们为简单排序(思路最简单)。


直接插入排序的思路:先把待排序列分为有序序列和无序序列,初始化时第一个元素为有序元素,排序时每次从无序序列中取第一个元素,查找其在有序序列中的位置,由于是有序序列只要找到第一个比它小的元素就找到了其位置。关键部分代码:

for(int i=1;i<n;i++){
	temp = a[i];
	j = i-1;

	while(j>=0 && a[j] > temp){
		a[j+1] = a[j];
		j--;
	}

	a[j+1] = temp;
}

冒泡排序:冒泡排序首先从思路上有三种1.下沉2起泡3.双端冒泡。下沉法每次都能选中一个最大的元素并且确定其最终的位置,起泡法每次都能选中一个最小的元素确定其位置,双端冒泡的方法每次都能选出一个最大的和一个最小的并确定其最终的位置。

关键部分代码如下:

for(int i=0;i<n;i++){	
	//下沉
	int j = 0;,k = n-1;
	while(j < n){
		if(a[j] > a[j+1]){
			int temp = a[j];
			a[j] = a[j+1];
			a[j+1] = temp;
		}
		j++;
	}//下沉

	//气泡

	while(k>0){
		if(a[k] < a[k-1]){
			int temp = a[k];
			a[k] = a[k-1];
			a[k-1] = temp;
		}
		k--;
	}//气泡

	if(j == k){
		break;
	}

}

简单选择排序:将待排序列分为有序序列和无序序列,初始化时有序序列为空,从无序序列中选取一个最小值,并且与无序序列中的第一个元素交换,有序序列+1,无需序列-1

关键处代码如下:

for(int i=0;i<n;i++){
	int k = i;//记录最小值的下标
	j = i + 1;
	while(j > n){
		if(a[j] > a[j-1]){
			k = j-1;
		}
		j++;
	}
	a[i] <-> a[k];
}

其实这里有一个问题忘了考虑了:若是i = k,就不用交换了,因此这里少考虑了这一点。


题外话:其实一切事情难就难在坚持,贵在坚持。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 1. 冒泡排序:每次比较相邻两个元素,如果前面的元素大于后面的元素,就交换它们的位置,以此类推。时间复杂度为O(n^2),对于数据量较小的情况,其实是一种不错的选择。 2. 快速排序:通过一趟排序将待排序记录分割成独立的两部分,之后再分别对这两部分进行排序,直到整个序列有序。时间复杂度为平均情况下O(nlogn),最坏情况下为O(n^2),但是实际应用中影响并不大,因为快速排序的平均时间复杂度很优秀。 3. 归并排序:将待排序序列分为若干子序列,每个子序列都是有序的,然后再将有序子序列合并为整体有序序列。时间复杂度稳定,在任何情况下都是O(nlogn)。 注意:以上排序特点并不详尽,仅为简单概括。 ### 回答2: 三种排序函数包括冒泡排序、插入排序和选择排序。 1. 冒泡排序:它是一种简单但低效的排序算法。它通过遍历待排序序列中的相邻元素,如果它们的顺序错误就交换它们,直到整个序列排序完成。冒泡排序的特点是时间复杂度为O(n^2),其中n是待排序序列的长度。冒泡排序是稳定的排序算法,它不会改变相等元素的相对顺序。虽然冒泡排序的效率较低,但当对小规模数组进行排序时,它的性能相对较好。 2. 插入排序:它是一种通过构建有序序列,对于未排序的数据,在已排序序列中从后向前扫描,找到相应位置并插入的排序算法。插入排序的特点是时间复杂度为O(n^2)。和冒泡排序一样,插入排序是稳定的排序算法。相对于冒泡排序,插入排序的交换次数较少,适用于初始元素部分有序的情况。当元素数量较小时,插入排序的效率较高。 3. 选择排序:它是一种简单直观的排序算法,每次从未排序的序列中选出最小(或最大)的元素,放到已排序序列的末尾。选择排序的特点是时间复杂度为O(n^2)。选择排序是不稳定的排序算法,因为它会改变相等元素的相对顺序。尽管选择排序的时间复杂度与冒泡排序和插入排序相同,但由于其每次只进行一次交换,所以在执行时间方面比冒泡排序和插入排序更优。选择排序适用于内存有限的排序场景。 ### 回答3: 在计算机科学中,常用的三种排序算法分别为冒泡排序、插入排序和选择排序。 1. 冒泡排序是一种简单直观的排序算法。它通过比较相邻元素的大小,将较大的元素往后移动,每一轮都将当前最大的元素移动到未排序部分的最后一个位置。重复以上步骤直到所有元素都有序。冒泡排序的特点是易于理解和实现,但效率较低,时间复杂度为O(n^2)。适用于数据量较小且基本有序的情况。 2. 插入排序是将未排序部分的元素逐个插入到已排序部分的适当位置。对于未排序部分的每个元素,将其与已排序部分的元素进行比较,找到适当的位置插入。插入排序的特点是简单易懂、稳定性较好,适用于部分有序的情况。然而,插入排序的时间复杂度也为O(n^2),对于大规模数据排序效率较低。 3. 选择排序是依次选择未排序部分的最小(或最大)元素,将其与未排序部分的第一个元素进行交换。每一轮都找到未排序部分中的最小(或最大)元素,依次放到已排序部分的末尾。选择排序的特点是简单直观,不需要大量的额外空间,时间复杂度也为O(n^2)。适用于数据量较小的情况。 总结来说,冒泡排序、插入排序和选择排序都是比较简单排序算法,它们的特点是易于理解和实现,时间复杂度都为O(n^2)。然而,它们在处理大规模数据时效率较低,适用于数据量较小的情况。如果需要处理大规模数据,可以选择更高效的排序算法,如快速排序、归并排序等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值