排序算法----冒泡和选择排序
1、冒泡排序
冒泡排序的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较 相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。
1.1冒泡排序代码实现
//冒泡排序算法
public static int[] maoPaoSort(int[] initial){
//temp定义为临时变量
int temp;
for (int j = 0; j < initial.length - 1; j++) {
//每次排序后,下一次排序都会比当前次数少一次,所以直接减j即可
//假如是从小到大排序,第一次就将最大的排到最右边,第二次只需要将第二大的,排到右边的第二位
for (int i = 0; i < initial.length - 1 -j; i++) {
if (initial[i] > initial[i + 1]){
//从小到大排序
temp = initial[i];
initial[i] = initial[i + 1];
initial[i+1] = temp;
}
}
}
return initial;
}
2、选择排序
选择排序基本思想:第一次从 arr[0]~arr[n-1]中选取最小值, 与 arr[0]交换,第二次从 arr[1]~arr[n-1]中选取最小值,与 arr[1]交换,第三次从 arr[2]~arr[n-1]中选取最小值,与 arr[2] 交换,…,第 i 次从 arr[i-1]~arr[n-1]中选取最小值,与 arr[i-1]交换,…, 第 n-1 次从 arr[n-2]~arr[n-1]中选取最小值, 与 arr[n-2]交换,总共通过 n-1 次,得到一个按排序码从小到大排列的有序序列。
2.1 选择排序代码实现
/**
* 选择排序算法
* 遍历数组的所有数,将最小的放到最左边,以此类推
* @Param initial 传入要排序的数组
* @Return 已经排序完的数组
*/
public static int[] choiceSort(int[] initial){
/**
* 假设每次遍历的第一个数就是最小的,将第一个数直接赋值给最小临时变量
* 直接从数组的第二个数开始遍历,与最小值做比较
* 每次比较后,将最小值的索引赋值给minIndex,minTemp用来记录最小值
*/
//minTemp:最小值临时变量
int minTemp;
//记录最小值的索引
int minIndex = 0;
//temp做数据交换的临时变量
int temp;
for (int j = 0; j < initial.length - 1; j++) {
minTemp = initial[j];
//j+1是因为每次遍历,都会从上一次遍历出结果,并交换顺序后的下一个数开始比较
// -j是因为每次遍历,都会比上次少遍历一个
for (int i = j + 1; i < initial.length - 1 - j; i++) {
if (initial[i] < minTemp){
minIndex = i;
minTemp = initial[i];
}
}
//遍历完一次之后,就把这个最小值,和已经排序了的数的下一个数,两个数做交换
//假如已经排序好了前面两个数,就把最小值的数,和第三个数做交换
temp = initial[j];
initial[j] = initial[minIndex];
initial[j] = temp;
}
return initial;
}
后续更新插入排序、希尔排序、快速排序、归并排序、基数排序、交换排序、堆排序,敬请期待~
|