Go算法之奇偶排序

一、什么是奇偶排序

(以下排序步骤来自 文心一言 加上 本人的一些理解,我觉得ai讲的比较透彻)

奇偶排序步骤:

  1. 初始化:给定一个待排序的数组。

  2. 奇数轮次遍历

    • 从索引1(即第二个元素,因为索引从0开始)开始,以步长为2(i + 2)遍历数组。
    • 比较当前元素与其后一个元素(即索引为ii+2的元素)。
    • 如果当前元素大于后一个元素,则交换它们的位置。
  3. 偶数轮次遍历

    • 从索引0开始,同样以步长为2遍历数组。
    • 执行与奇数轮次相同的比较和交换操作,但这次是针对索引为ii+2的元素(在数组边界内)。
  4. 重复:交替进行奇数轮次和偶数轮次的遍历,直到数组完全有序。理论上,对于长度为n的数组,最多需要n轮遍历(尽管在实际应用中,往往远少于n轮即可达到有序状态)。

  5. 结束:当数组变得有序时,算法结束。

可以看到我们最终是不交换了,算法就结束了,所以我们还需要一个东西来标识交换与不交换。

二、代码实现

话不多说,上代码:

package sort

import (
	"log"
	"testing"
)

func TestOddEvent(t *testing.T) {
	arr := []int{5, 1, 1, 3, 2, 0}
	log.Println(arr)
	oddEvent(arr)
	log.Println(arr)
}

func oddEvent(arr []int) {
	// 奇偶都不需要交换的时候,就是有序
	isSorted := false
	for isSorted == false {
		isSorted = true
		for i := 0; i < len(arr)-1; i += 2 {
			if arr[i] > arr[i+1] {
				arr[i], arr[i+1] = arr[i+1], arr[i]
				isSorted = false
			}
		}
		for i := 1; i < len(arr)-1; i += 2 {
			if arr[i] > arr[i+1] {
				arr[i], arr[i+1] = arr[i+1], arr[i]
				isSorted = false
			}
		}
	}
}

你可能感兴趣的:(Go数据结构与算法小白入门,算法,golang,数据结构,后端,排序算法)