排序算法
1.选择排序
小编会在这个排序算法中总结几种常见的排序算法,为什么要进行总结呢,其实每个人的脑容量都是有限,咱们都没有过目不忘的超能力。所有对于某些知识学了,咱们还得花时间进行总结,知识是需要花时间和精力去沉淀的。所以小编会通过写帖子的方式来记录和温习一些比较基础的知识。当然,也会有很多好的算法进行分享。说了这么多题外话,进入正题吧!
给定一组数让我们排序成一个升序和降序的序列,我们能采用的排序算法有很多种,但是呢,算法也是有优劣的,判断优劣就是判断算法的时间复杂度和空间复杂度,还有一个概念就是稳定性。今天主要介绍的是选择排序!
来个动图:
//选择排序
public class SelectSort {
public static void main(String[] args) {
int[] arr = {2,4,5,1,3};
for(int i=0;i<arr.length;i++){
int minPos=i;
for(int j=i+1;j<arr.length;j++){
// if(arr[minPos]>arr[j]){
// minPos=j;
// }//注释的部分就等与下面这一条语句,也是三目运算符
minPos=arr[minPos]>arr[j] ? j : minPos;
}
//交换
Swap(arr, i, minPos);
}
//打印
Print(arr);
}
//下面封装两个方法
//打印最后排序的数组
static void Print(int[] arr){
for(int i=0;i<arr.length;i++)
System.out.print(arr[i]);
}
//交换两个数组的值
static void Swap(int[] arr,int i,int j){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
//时间复杂度为O(n^2),空间复杂度为O(1)
*分析:何为选择排序?它是怎么进行排序的?
答:这个问题是核心问题。在写代码时,第一步就是要分析,分析流程。选择排序:这里以升序排列,定义两个指针(在jiava中没有指针,所有我这里只是借用这个概念)i,j指向这个数组的第一个和第二个,双重for循环其实就是每一次确定一个数的最终位置,第一重就是确定位置,第二重就是为了找那个 j 应该放在 i 位置的数。如果有小伙伴不理解自己可以写一个数组当作例子,按上面的代码执行一下。(这个算法在排序中是很简单的一个)