冒泡排序与选择排序(基于数组三种排序)

Java基础学习结构思维导图

三种数组排序方式

1.冒泡排序

相邻的两个数值比较大小,互换位置。
1.1 相邻两个数值比较,利用temp临时变量转存数据,实现数值间的位置互换。
1.2 嵌套for,外层for实现趟数,每一趟都确定一个最大值,当所有数值按照升序排列时趟数为数据的个数-1。内层循环为一趟中,为确定一个最大值,每相邻两个数据的比较,当比较次数应该减去前一趟中已经确定下来的数据以及本身,所以次数应当减去趟数确定下来的数据(有几趟便确定几个最大数据则-i),同时也应该减去本身。
1.3实现升序后,想降序仅需将if条件修改,每当后一位数据大于前一位数据时则交换位置即可。

//冒泡排序 升序
public class ArrayRank1{
	public static void main(String[] args){
		int[] arr=new int[]{2,5,32,6,4};
		print(arr);//排序前
		for(int i=0;i<arr.length-1;i++){//趟数
			for(int j=0;j<arr.length-i-1;j++){//次数
				if(arr[j]>arr[j+1]){
					int temp=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=temp;
				}
			}
		}
		print(arr);//排序后
	}
	public static int[] print(int arr[]){//数组数值打印
		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]+"\t");
		}
		System.out.println();
		return arr;
	}
}

2.选择排序

固定值与其他值依次比较大小,互换位置。
2.1 for循环嵌套,外层循环表示每个值分别与其他值进行对比,所以有多少个数则需要确定多少个固定值来进行比较,但需考虑减去自身。
2.2 内层循环,每当外层固定一个数值进行比较时,内层循环便实现从这个固定值后的数开始与固定值进行比较,直到数组中最后位数值与固定值进行对比。
2.3 升序,进行比较后其实都比出了一位最小值,因为一旦其余数小于的时候便将值与固定值进行交换。
2.4降序操作,将if中的条件改为小于,一旦固定值小于后面的比较数时边交换,固定值留最大值。

//选择排序 升序
public class ArrayRank2{
	public static void main(String[] args){
		int[] arr=new int[]{2,5,32,6,4};
		print(arr);
		for(int i=0;i<arr.length-1;i++){//确定的固定值
			for(int j=i+1;j<arr.length;j++){//比较次数
				if(arr[i]>arr[j]){
					int temp=arr[i];
					arr[i]=arr[j];
					arr[j]=temp;
				}
			}
		}
		print(arr);
	}
	public static int[] print(int arr[]){//数组数值打印
		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]+"\t");
		}
		System.out.println();
		return arr;
	}
}

3.JDK排序

3.1 java.util.Arrays.sort(数组名);JDK提供升序(默认升序)

//JDK排序 升序
public class ArrayRank3{
	public static void main(String[] args){
		int[] arr=new int[]{2,5,32,6,4};
		print(arr);
		java.util.Arrays.sort(arr);
		print(arr);
	}
	public static int[] print(int arr[]){//数组数值打印
		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]+"\t");
		}
		System.out.println();
		return arr;
	}
}

3.2 若想实现降序则颠倒数组内的数值。

//JDK排序 升序
public class ArrayRank3{
	public static void main(String[] args){
		int[] arr=new int[]{2,5,32,6,4};
		print(arr);
		java.util.Arrays.sort(arr);
		print(arr);
		change(arr);
		print(arr);
	}
	public static void change(int arr[]){//元素倒置
		for(int i=0;i<arr.length/2;i++){
			int temp=arr[i];
			arr[i]=arr[arr.length-1-i];
			arr[arr.length-1-i]=temp;
		}
	}
	public static int[] print(int arr[]){//数组数值打印
		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]+"\t");
		}
		System.out.println();
		return arr;
	}
}

冒泡排序与选择排序区别

冒泡排序优缺点:
优点:比较简单,空间复杂度较低,是稳定的;
缺点:时间复杂度太高,效率慢
选择排序优缺点:
优点:一轮比较只需要换一次位置;
缺点:效率慢,不稳定

发布了14 篇原创文章 · 获赞 20 · 访问量 2400

猜你喜欢

转载自blog.csdn.net/weixin_44255829/article/details/104301595