functioncocktailSort(array) { let left,right,index,i left = 0// 数组的起始索引 right = array.length - 1// 数组索引的最大值 index = left // 临时变量
// 判断数组中是否有多个元素 while (left < right) { let isSorted = false // 每一次进入while循环,都会找出相应范围内最大最小的元素并分别放到相应的位置 // 大的排到后面 for (let i = left; i < right; i++) { // 从左到右扫描,找出较大的元素 if (array[i] > array[i + 1]) { swap(array, i, i + 1) index = i // 记录当前索引 isSorted = true } } right = index // 记录最后一个交换的位置 // 小的排到前面 for (let i = right; i > left; i--) { if (array[i] < array[i - 1]) { // 从右到左扫描,找出较小的元素 swap(array, i, i - 1) index = i isSorted = true } } left = index // 记录最后一个交换的位置 if (!isSorted) { // 没有需要排序的元素了,退出循环 break } } return arr }
// 鸡尾酒排序 funccocktailSort(arr []int) []int { var i int left, right := 0, len(arr)-1 index := left // 临时变量 // 判断数组中是否有多个元素 for left < right { isSort := false// 标志位,如果内循环没有发生交换元素,退出循环 for i = left; i < right; i++ { // 从左往右扫描,找出较大的元素 if arr[i] > arr[i+1] { arr[i], arr[i+1] = arr[i+1], arr[i] isSort = true index = i } } right = index for i = right; i > left; i++ { // 从右向左扫描,找出较小的元素 if arr[i] < arr[i-1] { arr[i], arr[i-1] = arr[i-1], arr[i] isSort = true index = i } } left = index if !isSort { break } } return arr }