一、冒泡排序
1、原理:
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
2、代码
public class BubbleSort{
public static void main(String[] args){
int scores[] = {67, 2, 75, 21, 89};
//冒泡排序
for (int i = 0; i < scores.length -1; i++){ //最多做n-1趟排序
for(int j = 0 ;j < scores.length - i - 1; j++){ //保证j+1正确,不能出现下标越界
//如果j对应的元素大于j+1元素,那么就交换两个变量的值
if(scores[j] > scores[j + 1]){ //把大的值交换到后面
//初始化一个临时变量
int temp = scores[j];
scores[j] = scores[j + 1];
scores[j + 1] = temp;
}
}
}
//输出最终排序结果
System.out.print("最终排序结果:"+Arrays.toString(scores));
}
}
二、选择排序
1、原理:
每一轮都找到当前最小元素,将其换到数组的最前面.
2、代码
import java.util.Arrays;
public class SelectSort{
public static void main(String[] args){
int arr[] = {67, 2, 75, 21, 89};
//使用外层循环确定要交换位置的元素下标
//每一次比较时,都是从i+1开始比较,保证下标索引越界,i的最大长度是arr.length-1
//比较到最后一轮时,就会只剩下一个元素,就不需要进行比较。
for(int i = 0;i<arr.length-1;i++) {
//初始化int类型的变量min存储当前最小元素下标
//默认i所对应 的元素就是最小的,因此min的默认值就是i
int min = i;
for(int j =i+1; j<arr.length;j++) {
//开始比较min所对应元素和j所对应的值的大小
if(arr[j] < arr[min]) {
//说明j所对应的元素值比min对应的元素值小
min = j;
}
}
//经过对所有元素进行比较,此时min对应的元素最小
//将min对应的元素与i对应的元素进行交换
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
//输出最终排序结果
System.out.print("最终排序结果:"+Arrays.toString(arr));
}
}
三、插入排序
1、原理
插入排序的算法过程,模拟了扑克牌整理的过程。其想法就是,从第二个数字开始,向前进行比较,为这个数字找到一个合适的位置,然后将这个数字放在这个位置。所谓合适的位置就是找到小于这个数字的后面,就是该数字的合适位置。
从小到大的插入排序整个过程如图示:
第一轮:从第二位置的 6 开始比较,比前面 7 小,交换位置。
第二轮:第三位置的 9 比前一位置的 7 大,无需交换位置。
第三轮:第四位置的 3 比前一位置的 9 小交换位置,依次往前比较。
第四轮:第五位置的 1 比前一位置的 9 小,交换位置,再依次往前比较。
…
就这样依次比较到最后一个元素。
2、代码
import java.util.Arrays;
public class InsertSort{
public static void main(String[] args){
int arr[] = {67, 2, 75, 21, 89};
//使用外层循环作为待插入牌的下标
//默认第一个数字是已经排好序的,第二个数字开始
for(int i =1 ;i <arr.length;i++) {
//此时需要将i所对应的数字开始和前面的进行比较
//由于要往前进行交换,那么使用临时变量记录此时i对应的元素值
int temp = arr[i];
//从i开始,向前进行比较,找到某个数字小于i对应的数字
//那么这个数字的后面就是存放i的元素值
int j = i;
while(j>0 && arr[j-1]>temp) {
//从i的位置开始,向前进行比较,如果说前面的数字大于i所对应的数字,
//那么此时i的位置就存储前面这个元素的值
arr[j] = arr[j-1];
j--;
}
//j-- = 0时,当循环结束时,就是下标索引到0,结束循环
arr[j] = temp;
//输出最终排序结果
System.out.print("最终排序结果:"+Arrays.toString(arr));
}
}
}