一、冒泡排序
1、算法步骤:
- 比较相邻的元素 : 如果第一个元素比第二个元素大,那么就交换他们两个
- 从第一对相邻的元素 开始比较 直到 最后一对,这样在最后的元素应该会是最大的数
- 针对所有的元素重复以上的步骤
2、冒泡动态图:
3、详细代码:
int[] arr = {6,5,7,4,3,2,1};
public static void bubble(int []arr) {
for (int i = 0; i < arr.length - 1; i++) { // -1,最后一趟不用比较
for (int j = 0; j < arr.length - 1 - i; j++) {// -1,是为了防止越界.-i是为了每趟内少比较i次
if (arr[j] > arr[j+1]) {
int temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
// 遍历排序后的数组
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
代码解读:这里冒泡算法被封装成函数,函数内第一个for循环是表示要循环几趟,减一是因为到最后趟时所有元素都有已经比较过了,所以最后一趟已经没有比较的意义了,第二个for循环是为了在还没有比较结束的队列里进行循环比较。
二、选择排序
1、算法步骤:
- 在待排序的一组数据中,选出最大或者最小的一个数与第一个位置的数交换
- 然后在剩下的数中,再找最大或者最小的数与第二个位置的数交换位置
- 依次类推直到倒数第二个与最后一个交换位置,选择排序结束
2、选择算法动态图
3、详细代码
int[] arr = {9,6,5,7,4,8,3,2,10,1};
public static void choose(int []arr) {
for (int i = 0; i < arr.length; i++) {
int minIndex = i;
for (int j = i; j < arr.length; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j; //记录最小值的下标
}
}
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
// 遍历排序后的数组
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
代码解读:第一个循环是表示要循环几趟,然后定义一个最小值的下标,在第二层循环中,在没有循环到的序列中找出最小值的下标,然后在通过下标将循环到的元素与最小值进行交换。