数组排序
冒牌排序
原理:
1.从尾部开始比较相邻的两个元素,如果尾部的元素比前面的大,就交换两个元素的位置。
2.往前对每个相邻的元素都做这样的比较、交换操作,这样到数组头部时,第 1 个元素会成为最大的元素。
3.重新从尾部开始第 1、2 步的操作,除了在这之前头部已经排好的元素。
4.继续对越来越少的数据进行比较、交换操作,直到没有可比较的数据为止,排序完成。
int[] arr= {4,22,12,3};
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length-1-i; j++) {
if(arr[j]<arr[j+1]) {//这里大于,小于 控制的是排列的升序还是降序
int a=arr[j];//这里a 相当于一个容器作为交换的桥梁
arr[j]=arr[j+1];
arr[j+1]=a;
}
}
}
//遍历排序后的数组
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
总结:这个算法让我想起了小时候在操场排队跑步,老师总是说:“高的站前面,低的站后面”。我们一开始并不一定会站到准确的位置上,接着老师又说:“你比前面的高,和前面的换换,还高,再和前面换换”,就这样找到了自己的位置。
选择排序
原理:
是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
int[] arr= {22,12,44,1};
for (int i = 0; i < arr.length; i++) {
int min=arr[i];//假设最小
int index=i;//记录最小的下表
for (int j = i; j < arr.length; j++) {
if (arr[j]<min) {//找到最小的数
min=arr[j];
index=j;
}
}
//交换位置,以此类推最小(大)的,会继续排序
arr[index]=arr[i];
arr[i]=min;
}
//排序后的遍历
for (int i : arr) {
System.out.println(i);
}
总结:就像学校升旗站队从低到高,每一次排序把最低(高)的喊出来依次排序