阅读 52

Java中的常用排序方法冒泡排序、选择排序和插入排序(附带习题)

1. 冒泡排序

冒泡排序:
相邻元素两两比较,大的往后放,第一次完毕后,最大值就出现在了最大索引处,
同理,继续,即可得到一个排好序的数组。
规律:

  • 1.两两比较,大的往后放。
  • 2.第一次比较完后,下一次比较的时候就是减少一个元素的比较
  • 3.第一次比较,有0个元素不比。
    第二次比较,有1个元素不比。
    第三次比较,有2个元素不比。
  • 4.总共需要比较 数组长度-1次。

代码实现

public class Test1 {

	public static void main(String[] args) {
		//定义一个数组
		int[] array = { 5, 6, 13, 2, 7, 23, 8, 11 };
		//循环遍历次数
		for (int i = 0; i < array.length; i++) {
			每一次循环都需要对比
			for (int j = 0; j < array.length - i - 1; j++) {
				// 比较j和j+1
				if (array[j] > array[j + 1]) {
					int temp = array[j];
					array[j] = array[j + 1];
					array[j + 1] = temp;

				}
			}

		}
		System.out.println(Arrays.toString(array));
	}
}
复制代码

运行结果:

[26, 47, 93, 90, 38, 16, 81, 80, 63, 38]
[16, 26, 38, 38, 47, 63, 80, 81, 90, 93]
复制代码

2.选择排序

选择排序:
从0索引开始,一次和后面元素比较,小的往前方,第一次完毕后,最小值出现在
了最小索引处。其他的同理即可以得到一个排好序的数组。

规律:

  • 1:第一次是从0索引开始和其他的进行比较 第二次是从1索引开始和其他的进行比较
    以此类推....
  • 2:最后一次是数组长度-2的元素个数组长度-1的元素比较

代码实现

public class Test2 {

	public static void main(String[] args) {
		//定义一个数组 赋值几个随机数字
		int[] array = { 5, 6, 13, 2, 7, 23, 8, 11 };

	for (int i = 0; i < array.length; i++) {

			for (int j = i + 1; j < array.length; j++) {
				if (array[j] < array[i]) {
					//引用第三方变量
					int temp = array[j];
					array[j] = array[i];
					array[i] = temp;
				}
			}
		}

		System.out.println(Arrays.toString(array));

	}
}
复制代码

运行结果如下:

[1, 3, 4, 5, 6, 7, 8, 9]
复制代码

3.插入排序

插入排序
插入排序类似于打扑克牌,从第二张牌开始插入,小的插到大的前面,然后使其有
序。再拿第三张牌来,找到合适的位置继续插入,使这三张有序。在第四张直至全部
插入有序。

代码实现

//第一个for控制插入的次数,
//第二个for循环是每一次插入后,
//找到插入值合适位置,使现有的元素有序。
public static int[] sort2(int[] ins){		
		for(int i=1; i<ins.length; i++){
			int temp = ins[i];//保存每次需要插入的那个数
			int j;
			for(j=i; j>0&&ins[j-1]>temp; j--){//这个较上面有一定的优化
				ins[j] = ins[j-1];//吧大于需要插入的数往后移动。最后不大于temp的数就空出来j
			}
			ins[j] = temp;//将需要插入的数放入这个位置
		}
		return ins;
	}
复制代码

共勉

我要一步一步往上爬
在最高点乘着叶片往前飞
任风吹干流过的泪和汗
我要一步一步往上爬
等待阳光静静看着它的脸
小小的天有大大的梦想
我有属于我的天
任风吹干流过的泪和汗
总有一天我有属于我的天
1

文章分类
Android
文章标签