冒泡排序和选择排序原理及代码实现
程序员文章站
2022-03-24 15:41:14
...
冒泡排序
/**
* 冒泡排序原理:数组中参与比较的元素交换位置不是都有意义,交换次数多
* 例如数组 int arr[] = {5,4,9,10,6};
* 使用循环语句,每次循环将数组下标为0的元素,和右边相邻的元素进行比较,如果比右边的元素大则交换位置,否则不交换,
* 按照顺序往后比较,每次循环取出最大的元素,放到最右边,像气泡一样冒出来,同时比较次数减一,因为每次产生的最大值没必要在进行比较;
* <p>
* 原始数据: 5,4,9,10,6
* 第一次循环:参与比较的数据:5,4,9,10,6
* 4,5,9,10,6 (5和4比较,5>4,交换位置)
* 4,5,9,10,6 (5和9比较,5<9,不交换位置)
* 4,5,9,10,6 (9和10比较,9<10,不交换位置)
* 4,5,9,6,10 (10和6比较,10>6,交换位置)
* <p>
* 第二次循环:参与比较的数据:5,4,9,6
* 4,5,9,6 (4和5比较,4<5,不交换位置)
* 4,5,9,6 (5和9比较,5<9,不交换位置)
* 4,5,6,9 (9和6比较,9>6,交换位置)
* <p>
* 第三次循环:参与比较的数据:4,5,6
* 4,5,6 (4和5比较,4<5,不交换位置)
* 4,5,6 (5和6比较,5<6,不交换位置)
* <p>
* 第四次循环:参与比较的数据:4,5
* 4,5 (4和5比较,4<5,不交换位置)
*/
public class BubbleSort {
public static void main(String[] args) {
int arr[] = {5, 4, 9, 10, 6};
print(arr);
for (int i = arr.length - 1; i > 0; i--) {//循环次数
int temp = 0;
for (int y = 0; y < i ; y++) {//比较
if (arr[y] > arr[y + 1]) {//交换位置
temp = arr[y];
arr[y] = arr[y + 1];
arr[y + 1] = temp;
}
}
}
print(arr);
}
//遍历数组
public static void print(int arr[]) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
}
选择排序
**
* 选择排序原理:数组中参与比较的元素交换位置都有意义,交换次数少
* 例如数组 int arr[] = {5,4,9,10,6};
* 使用循环语句,从下标为0的元素开始,和右边相邻的元素进行比较,如果比右边的元素大则下标为0的元素
* 按照顺序往后比较,每次循环取出最小的元素,和下标为0的元素交换位置,同时比较次数减一,因为每次产生的最小值没必要在进行比较,
* 下个循环比较从下标为1的元素开始比较;
* <p>
* 原始数据: 5,4,9,10,6
* 第一次循环:参与比较的数据:5,4,9,10,6
* 4,5,9,10,6 (4最小,4和5交换位置)【0】下标
*
* <p>
* 第二次循环:参与比较的数据:5,9,10,6
* 5,9,10,6 (5最小,不交换位置)【1】下标
*
* <p>
* 第三次循环:参与比较的数据:9,10,6
* 6,9,10 (6最小,6和9交换位置)【2】下标
*
* <p>
* 第四次循环:参与比较的数据:9,10
* 9,10 (9最小,不交换位置)【3】下标
*/
public class SelectSort {
public static void main(String[] args) {
int arr[] = {5, 4, 9, 10, 6};
print(arr);
for (int i = 0; i < arr.length - 1; i++) {
//假设i下标元素最小
int min = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[min] > arr[j]) {
min = j;//最终取得最小元素的下标
}
}
if (min != i) {//假设下标i不是最小的
//交换位置
int temp;
temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
print(arr);
}
//遍历数组
public static void print(int arr[]) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
}
上一篇: 纪信:曾救刘邦一命,宁死不屈被项羽烧死
下一篇: js如何实现递归函数