JAVA基础之数组三大排序(笔试必考)

1.冒泡排序

思路:1.冒泡排序是通过两两比较,按顺序依次向后比较,如果比后面数大就交换位置,否则就不动,然后比较后一个数,直到比较完倒数第二个数,才结束一轮。

 举例:int [ ] a={15,2,25,6,};

第一轮: 2 15 25 6      2 15 25 6   2 15  6  25

第二轮:  2 15 6 25     2  6  15  25   

 第三轮: 2  6 15  25             

可以看出 每一轮 比较的次数都会较上一轮少1,所以不用再去比较,接下来就是代码的书写了,我们可以考虑嵌套的for循环,外层循环控制比较的轮数,内层循环控制比较的次数。

package com.test;

import java.util.Collections;


public class Sort {
public static void main(String[] args) {
int [] a= {85,25,35,15,5,95,45,65};
      f1(a);//
	
}

private static void f1(int[] a) {
	System.out.println("未排序的数组为:");
for (int i : a) {
	System.out.print(i+" ");
}
	int l=a.length;

	for (int i = 0; i < l; i++) {//外层循环控制循环的轮数  
		for (int j = 0; j < l-i-1; j++) {//内存循环来控制每轮比较以及交换的次数
			if (a[j]>a[j+1]) {
				a[j]=a[j]^a[j+1];
				a[j+1]=a[j]^a[j+1];
				a[j]=a[j]^a[j+1];
			}
		}
		
	}
System.out.println();
System.out.println("排序后的数组:");
for (int i : a) {
	
	System.out.print(i+" ");
}

}
}

2.选择排序

1.思路,选择排序的思路是每一轮找出最小值,与每一轮的起始位置进行交换,简而言之,就是找到最小值,放到最前端。

2.代码,既然要找到最小值,那么我们的思路仍然是外层循环控制循环的轮数,内存循环要找出最小值的下标,然后存起来,待内层循环结束后,交换位置。话不多说,下面上代码:

package com.test;

import java.util.Collections;


public class Sort1 {
public static void main(String[] args) {
int [] a= {85,25,35,15,5,95,45,65};
	f2(a);//选择排序
}

private static void f2(int[] a) {
	System.out.println("未排序的数组为:");
	for (int i : a) {
		System.out.print(i+" ");
	}
int l=a.length;
for (int i = 0; i < l; i++) {//外层循环控制轮数
	int min=i;//最小值的下标
  for (int j = min; j < l; j++) {//循环找出此轮最小值
	if (a[j]<a[min]) {
		min=j;//得到此轮最小值的下标
	}
	
}
  if(i != min){ //在内层循环结束后,交换此轮最小值与起始值的位置
  a[i]=a[i]^a[min];
	a[min]=a[i]^a[min];
	a[i]=a[i]^a[min];
  }
}
System.out.println();
System.out.println("排序过后的数组为");
for (int m : a) {
	System.out.print(m+" ");
}


	
}

3.插入排序

1.思路:插入排序是每一轮的起始值与前面的排序区进行比较,以插入到合适的位置。

2.代码:依旧是外层控制轮数,内层循环将每轮起始值与前面的排序区进行比较,进行判断,不能交换就停下,这里因为前面是有序的,所以可以直接停下,而不用继续比较,不同于选择排序。下面上代码:

package com.test;




public class Sort1 {
public static void main(String[] args) {
int [] a= {85,25,35,15,5,95,45,65};
     
	
	f3(a);//插入排序
}

private static void f3(int[] a) {
	System.out.println("未排序的数组为:");
	for (int i : a) {
		System.out.print(i+" ");
	}
	int l=a.length;
	for (int i = 0; i < l-1; i++) {//控制轮数
		for (int j= i+1; j >0; j--) {
			if (a[j]<a[j-1]) {//交换
				a[j]=a[j]^a[j-1];
				a[j-1]=a[j]^a[j-1];
				a[j]=a[j]^a[j-1];
			}
		}
	}
	System.out.println("");
	System.out.println("排序过后的数组为:");
	for (int i : a) {
		System.out.print(i+" ");
	}
	
}
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值