見つけるためのアルゴリズムと半分をソートする4種類の

1.バブルソート

FUNCバブルソート(スライス[] INT)[] INT { 
	I、J、さて、カウント= 0、0、trueに、LEN(スライス)
	I = 0を、I <COUNT-1、Iは必要カウントアップ// {++。比較ホイール-1 
		真へさて= 
		J = 0; J <-COUNT-I 1、。Jの各++ {//の論理比較
			IFスライス[J]>スライス[J + 1] { 
				スライス[J]、スライス[ 1 + J] =スライス[J + 1]、スライス[J] 
				falseにさて= 
			} 
		} 
		さて場合ホイール交換がない位置の比較を発生していない場合、{//、説明は完全にソートされた、ループ早期終了
			BREAKを
		} 
	} 
	スライスを返します
}

 

2.挿入ソート

InsertSort FUNC(スライス[] INT)[] {int型
	VAR I、JのINTの
	COUNT:= LEN(スライス)
	I = 1; Iは<COUNT; I ++ { 
		Jため= I、J> 0; // {J、比較により、挿入位置を見つけるために、
			スライス[-J 1]>スライス[J] IF { 
				スライス[-J 1]、スライス[J] =スライス[J]、スライス[-J 1] 
			}現在の要素のが{そうである//ループ終了し、挿入位置を見つける
				BREAKを
			} 
		} 
	} 
	スライスを返します
}

  

3.ソート

FUNC SelectSort(スライス[] INT)[] INT { 
	VAR I、J、minKeyがint 
	数:= LEN(スライス)
	するため、I = 0。I <カウント-1を、私は++ { 
		minKey = I 
		jに対する= I + 1。J <数えます。J ++ {//找最小数位置
			であればスライス[minKey]>スライス[J] { 
				minKey = J 
			} 
		} 
		もしminKey!= I { 
			スライス[minKey]、スライス[i]は=スライス[i]は、スライス[minKey] 
		} 
	} 
	戻りスライス
}

  

4.クイックソート

func QuickSort(slice []int, start, end int) {
	if start >= end {
		return
	}
	i, j := start, end
	val := slice[(i+j)/2]
	for i <= j {
		for i <= end && slice[i] < val {
			i++
		}
		for j >= start && slice[j] > val {
			j--
		}
		if i <= j {
			slice[i], slice[j] = slice[j], slice[i]
			i++
			j--
		}
	}

	if start < j {
		QuickSort(slice, start, j)
	}
	if end > i {
		QuickSort(slice, i, end)
	}
}

  

5. 二分查找

func BinarySearch(slice []int, head, tail, value int) int {
	if head > tail {
		return -1
	}
	middle := (head + tail) / 2
	if slice[middle] == value {
		return middle
	} else if slice[middle] < value {
		return BinarySearch(slice, middle+1, tail, value)
	} else {
		return BinarySearch(slice, head, middle-1, value)
	}
}

  

おすすめ

転載: www.cnblogs.com/wujuntian/p/11612892.html