简单选择排序算法总结

本文详细介绍了简单选择排序算法的基本思想、实现过程及应用示例,通过具体代码展示了如何使用简单选择排序对数组进行排序,并输出排序后的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class SelectSort 
{
	public static void selectSort(int[] array)
	{
		int min = 0;
		int i,j;
		for(i = 0; i < array.length - 1; i++)//n-1趟循环
		{
			min = i; //将当前下标定义为最小值下标
			for(j = i + 1; j < array.length; j++)  //第i趟中,从i+1的下标开始循环,直到数组的末尾
			{
				if(array[min] > array[j]) 
				{
					min = j;
				}
			}
			if(i != min) //若i不等于min,则说明找到最小值,交换;如果i=min,则不用交换
			{
				int temp = array[min];
				array[min] = array[j];
				array[j] = temp;
			}
		}	
	}
	public static void mian(String[] args)
	{
		int[] array = {1, 5, 2, 8, 7, 9}; //定义数组
		SelectSort.selectSort(array);
		for(int i = 0; i < array.length; i++) //输出排序后的数
		{
			System.out.println(array[i]);
		}
	}
}
总结:简单选择排序的基本思想是首先在未排序关键字中找到最小(大)的记录,存放到排序序列的起始位置,再从剩余未排序关键字中继续寻找最小(大)的记录,然后放到已排序序列的末尾。以此类推,直到所有关键字均排序完毕。
### 排序算法总结与概述 排序算法是指通过某种规则将一组数据按照特定顺序排列的过程。排序算法在计算机科学中占据重要地位,尤其是在大规模数据处理领域,一个高效的排序算法可以显著提升性能和资源利用率[^4]。 #### 1. 基于比较的排序算法 基于比较的排序算法是通过比较元素之间的大小关系来确定排列顺序的一类算法。这类算法的时间复杂度下界为 \(O(n \log n)\),常见的基于比较的排序算法包括以下几种: - **插入排序(Insertion Sort)**:通过逐步将未排序部分的元素插入到已排序部分的适当位置完成排序。时间复杂度为 \(O(n^2)\)。 - **选择排序(Selection Sort)**:每次从未排序部分选择最小(或最大)元素放到已排序部分的末尾。时间复杂度为 \(O(n^2)\)。 - **冒泡排序(Bubble Sort)**:通过多次遍历数组,两两比较相邻元素并交换顺序完成排序。时间复杂度为 \(O(n^2)\)。 - **归并排序(Merge Sort)**:采用分治策略,将数组分为两部分分别排序后合并。时间复杂度为 \(O(n \log n)\)。 - **快速排序(Quick Sort)**:通过选择基准值将数组划分为两部分递归排序。平均时间复杂度为 \(O(n \log n)\),最坏情况下为 \(O(n^2)\)。 - **堆排序(Heap Sort)**:利用堆这种数据结构进行排序,时间复杂度为 \(O(n \log n)\)。 - **希尔排序(Shell Sort)**:对直接插入排序的优化,通过分组预排序减少数据移动次数。时间复杂度介于 \(O(n^{1.3})\) 和 \(O(n^2)\) 之间[^5]。 #### 2. 非基于比较的排序算法 非基于比较的排序算法依赖元素间的比较,而是通过其他方式实现排序,通常适用于特定场景。常见的非基于比较的排序算法包括: - **计数排序(Counting Sort)**:通过统计每个值出现的次数进行排序。时间复杂度为 \(O(n + k)\),空间复杂度为 \(O(n + k)\),适用于 \(k\) 大的场景[^3]。 - **桶排序(Bucket Sort)**:将数据分配到多个桶中分别排序后再合并。时间复杂度为 \(O(n)\),但需要额外的空间。 - **基数排序(Radix Sort)**:按位对数据进行排序,适用于整数或字符串排序。时间复杂度为 \(O(d(n + k))\),其中 \(d\) 是关键字位数[^4]。 #### 3. 排序算法的比较 | 算法名称 | 时间复杂度(最好) | 时间复杂度(平均) | 时间复杂度(最坏) | 空间复杂度 | 稳定性 | |----------------|--------------------|--------------------|--------------------|------------|--------| | 插入排序 | \(O(n)\) | \(O(n^2)\) | \(O(n^2)\) | \(O(1)\) | 稳定 | | 选择排序 | \(O(n^2)\) | \(O(n^2)\) | \(O(n^2)\) | \(O(1)\) | 稳定 | | 冒泡排序 | \(O(n)\) | \(O(n^2)\) | \(O(n^2)\) | \(O(1)\) | 稳定 | | 归并排序 | \(O(n \log n)\) | \(O(n \log n)\) | \(O(n \log n)\) | \(O(n)\) | 稳定 | | 快速排序 | \(O(n \log n)\) | \(O(n \log n)\) | \(O(n^2)\) | \(O(\log n)\) | 稳定 | | 堆排序 | \(O(n \log n)\) | \(O(n \log n)\) | \(O(n \log n)\) | \(O(1)\) | 稳定 | | 希尔排序 | \(O(n^{1.3})\) | \(O(n^{1.3})\) | \(O(n^2)\) | \(O(1)\) | 稳定 | | 计数排序 | \(O(n + k)\) | \(O(n + k)\) | \(O(n + k)\) | \(O(n + k)\) | 稳定 | #### 4. 排序算法的应用场景 同的排序算法适用于同的场景,以下是常见应用场景的总结: - 数据量较小且对稳定性要求较高时,可以选择插入排序或冒泡排序。 - 数据量较大且追求效率时,可以选择归并排序、快速排序或堆排序。 - 数据范围较小时,可以选择计数排序或桶排序。 - 对于多关键字排序问题,可以选择基数排序。 ```python def quick_sort(arr): if len(arr) <= 1: return arr else: pivot = arr[len(arr) // 2] left = [x for x in arr if x < pivot] middle = [x for x in arr if x == pivot] right = [x for x in arr if x > pivot] return quick_sort(left) + middle + quick_sort(right) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值