rust 实现冒泡排序

一,冒泡排序

          冒泡排序就是重复“从序列右边开始比较相邻两个数字的大小,再根据结果交换两个数字的位置”这一操作的算法。在这个过程中,数字会像泡泡一样,慢慢从右往左“浮”到序列的顶端。

          在冒泡排序中,第 1 轮需要比较 n - 1 次,第 2 轮需要比较 n - 2 次……第 n - 1 轮需 要比较 1 次。因此,总的比较次数为 ( n - 1 ) + ( n - 2 ) + + 1 ≈ n 2 /2 。这个比较次数恒定为 该数值,
和输入数据的排列顺序无关。 不过,交换数字的次数和输入数据的排列顺序有关。假设出现某种极端情况,如输 入数据正好以从小到大的顺序排列,那么便不需要任何交换操作;
反过来,输入数据要 是以从大到小的顺序排列,那么每次比较数字后便都要进行交换。因此,冒泡排序的时 间复杂度为 O (n2)

二,代码实现

           添加了泛型


fn bubble_sort<T: PartialOrd + Copy>(list: &mut Vec<T>) -> &Vec<T> {
    for i in 0..list.len() {
        for x in 0..list.len() - 1 {
            //实际交换次数等于 n-1
            if list[x] > list[x + 1] {
                list.swap(x, x + 1); //元素交换位置
            }
        }
    }
    list
}

三,实现效果展示

fn main() {

    let mut list = vec![1, 34, 50, 200, 34, 51, 25, 100, 65];
    bubble_sort(&mut list);
    println!("{:?}  ", list);

    let mut list = vec!['D', 'e', 'A', 'C', 'a', 'W'];
    bubble_sort(&mut list);
    println!("{:?}  ", list);
}

console:

[1, 25, 34, 34, 50, 51, 65, 100, 200]  
['A', 'C', 'D', 'W', 'a', 'e']  

猜你喜欢

转载自blog.csdn.net/qq_39308071/article/details/114258383