在一维数组中,排序是很重要的。
冒泡排序
原理:比较两个相邻的元素,将较大的值交换到右边
2 8 7 5 9 4 3
第一趟:
第一次:比较2和8,不交换
第二次:比较8和7,8和7进行交换:2 7 8 5 9 4 3
第三次:比较8和5,将8和5交换:2 7 5 8 9 4 3
。。。。。。
第六次:交换,2 7 5 8 4 3 9
(第一趟结束后,最大的数字,出现在了最后一位)
第二趟:
。。。。。。
第六次??
(第二趟结束后,第二大的数字,出现在倒数第二位)
第三趟:
(第三趟结束后,第三大的数字,出现在倒数第三位)
以此类推。。。
题目:用冒泡排序:[10, 1, 35, 61, 89, 36, 55] 代码如下:
package Day02_sort;
//冒泡排序
public class sort01 {
//思路:从第一个数开始,比较本身和下一个数的大小,把大的那个数放在下一个数的位置上;
// 以此类推,每循环完一趟便少做一次变换
public static void main(String[] args) {
int[] pb = {10, 1, 35, 61, 89, 36, 55};
//每一趟都会跑好一个数字,所以共有length-1趟
for(int j = pb.length - 1;j > 0;j --) {
for(int i = 0;i < j;i ++) {
if(pb[i] > pb[i+1]) {
//交换
mySwitch(pb, i, i+1);
}
}
}
myPrint(pb);
}
public static void mySwitch(int[] arr, int a, int b) {
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
public static void myPrint(int[] input) {
for(int i = 0;i < input.length;i ++) {
System.out.print(input[i]+" ");
}
}
}
选择排序
原理:
第一次,从未排序的数据元素里,选出一个最小的(最大的)元素,然后和第一位元素交换位置。
第二次,选出第二小(第二大)的元素,然后和第二位元素交换位置。
。。。。。。
用选择排序:[5, 8, 7, 1, 2, 6, 9] 代码如下:
package Day02_sort;
// 选择排序
public class sort02 extends Tools{
public static void main(String[] args) {
int[] pb = {5, 8, 7, 1, 2, 6, 9};
//浮标
for(int i = 0;i < pb.length - 1;i ++) {
int minIndex = i;
for(int j = i;j < pb.length;j ++) {
if(pb[j] < pb[minIndex]) {
//交换
mySwitch(pb, j, i);
}
}
}
//打印
myPrint(pb);
}
}
插入排序
原理:将数列分成两个部分:排好序的数列,未排序的数列
在未排序的数列里面,挨个儿取出元素插入到排好序的数列中
这个比较难解释,自行在c站里搜搜"插入排序",了解一下吧o(* ̄▽ ̄*)ブ
我在这里就提供下代码
用插入排序:[5, 8, 7, 1, 2, 6, 9] 代码如下:
package Day02_sort;
import java.util.Arrays;
// 插入排序
public class sort03 extends Tools{
public static void main(String[] args) {
int[] pb = {8, 4, 5, 6, 1, 2};
Arrays.sort(pb);
//从第二个元素开始(因为第一个元素已经算在排好序的队列里了)
for(int i=1; i<pb.length; i++){
//哨兵位置
for(int j = i; j > 0; j--){
if(pb[j] < pb[j-1]){
mySwitch(pb,j,j-1);
}
}
}
myPrint(pb);
}
}
以上就是三种简单的排序方法啦!!!