rust 排序算法

88 阅读1分钟

1、冒泡排序

fn bubble_sort(arr: &mut [i32]) {
  let ln = arr.len();
  for i in 0..ln {
    for j in 0..ln - i - 1 {
      if arr[j] > arr[j + 1] {
        arr.swap(j, j + 1);
      }
    }
  }
}

2、选择排序

fn select_sort(arr: &mut [i32]) {
  for i in 0..arr.len() {
    let mut min_index = i;
    for j in i + 1..arr.len() {
       if arr[j] < arr[min_index] {
         min_index = j;
       }
    }
    if min_index != i {
      arr.swap(min_index, i)
    }
  }
}

3、插入排序

fn insert_sort(arr: &mut [i32]) {
  for i in 0..arr.len() {
    let mut j = i;
    while j > 0 && arr[j - 1] > arr[j] {
      arr.swap(j - 1, j);
      j -= 1;
    }
  }
}

4、快速排序

fn partition(arr: &mut [i32]) -> usize {
  let pivot_idx = arr.len() - 1;
  let mut i = 0;
  for j in 0..pivot_idx {
    if arr[j] < arr[pivot_idx] {
      arr.swap(i, j);
      i += 1;
    }
  }
  arr.swap(i, pivot_idx);
  i
}

fn quick_sort(arr: &mut [i32]) {
    if arr.len() > 1 {
        let pivot = partition(arr);
        quick_sort(&mut arr[..pivot]);
        quick_sort(&mut arr[pivot + 1..]);
    } 
}