排序算法----冒泡和选择排序
# 排序算法----冒泡和选择排序## 1、冒泡排序
> 冒泡排序的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较 相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。
>
## 1.1冒泡排序代码实现
```java
//冒泡排序算法
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 > initial){
//从小到大排序
temp = initial;
initial = initial;
initial = temp;
}
}
}
return initial;
}
```
## 2、选择排序
> 选择排序基本思想:第一次从 arr~arr中选取最小值, 与 arr交换,第二次从 arr~arr中选取最小值,与 arr交换,第三次从 arr~arr中选取最小值,与 arr 交换,…,第 i 次从 arr~arr中选取最小值,与 arr交换,…, 第 n-1 次从 arr~arr中选取最小值, 与 arr交换,总共通过 n-1 次,得到一个按排序码从小到大排列的有序序列。
## 2.1 选择排序代码实现
```java
/**
*选择排序算法
*遍历数组的所有数,将最小的放到最左边,以此类推
* @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+1是因为每次遍历,都会从上一次遍历出结果,并交换顺序后的下一个数开始比较
// -j是因为每次遍历,都会比上次少遍历一个
for (int i = j + 1; i < initial.length - 1 - j; i++) {
if (initial < minTemp){
minIndex = i;
minTemp = initial;
}
}
//遍历完一次之后,就把这个最小值,和已经排序了的数的下一个数,两个数做交换
//假如已经排序好了前面两个数,就把最小值的数,和第三个数做交换
temp = initial;
initial = initial;
initial = temp;
}
return initial;
}
```
后续更新插入排序、希尔排序、快速排序、归并排序、基数排序、交换排序、堆排序,敬请期待~ (define (Merage ls0 ls1) (cond
((null? ls0) ls1)
((null? ls1) ls0)
(else (if (> (car ls0) (car ls1))
(cons (car ls1) (Merage ls0 (cdr ls1)))
(cons (car ls0) (Merage (cdr ls0) ls1))))))
(define (Msort ls0)
(let* ((i (quotient (length ls0) 2)) (i1 (- (length ls0) i)))
(cond
((= (length ls0) 1) ls0)
((= (length ls0) 2) (Merage (list (car ls0))
(cdr ls0)))
(else (Merage (Msort (drop-right ls0 i1))
(Msort (drop ls0 i))
)))))
二路归并排序 学到了,谢谢 谢谢大佬,学到了 经典排序算法 谢谢大佬 学会了 {:1_918:}继续 不错 感谢分享 整理的非常好啊! 感谢分享
页:
[1]
2