찾을 수있는 알고리즘과 반 정렬의 네 가지

1. 버블 정렬

FUNC 거품 정렬 (슬라이스 [] INT)] INT는 { 
	I는, J가 좋아, 카운트 = 0, 0, true로 렌 (조각) 
	. I = 0; I는 <count- 1; I ++ {// 가입 요구 횟수 비교 휠 -1 
		참 괜찮 = 
		J = 0; J <-count-I (1)]. J 각각 ++ {// 논리 비교 
			IF 슬라이스 [J]> 슬라이스 [J + 1이다.] { 
				슬라이스 [J], 슬라이스 [ . (1) + J = 슬라이스 [J의 +. 1] 슬라이스 [J] 
				거짓 괜찮 = 
			} 
		} 
		휠 교환 더 위치 비교를 발생하지 않는 경우, 설명은 완전한 정렬 된 // {좋아한다면, 루프 조기 종료 
			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; 난 카운트 <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