그리고 수의 세 가지 일반적인 정렬 알고리즘 예제의 사용 (자바)

장치의 수는 몇 개입니까?
코드 조각이 쓸 때, 어떻게 올바른 검증을? 당신은 당신의 자신의 디자인 케이스를 갈 수 있지만, 어떤 경우에 당신이 생각할 수 있습니다. 당신은 또한 자신의 코드를 테스트에 적합 OJ 시스템 보이지만이 방법이 편리하지 않을 때 종종 문제가 발생하지만, 다른 사람은 반드시 옳지 않다 테스트 케이스를 찾을 수 있습니다. 대수 단위를 사용하면 자신의 코드를 확인할 수있을 것입니다.

: 로그인 약 3 이점이
우리가 자신의 코드를 테스트 올바른 OJ 시스템을 찾을 때 1. 코드를 테스트하기 위해 자신에게 장치의 번호를 쓸 수 있습니다.
2. 인터뷰하는 동안 작은 샘플 테스트에서 모든 권리를 제공했다. 그러나 큰 샘플 테스트 오류는이 시간에 잘못된 장소는 코드가 더 어려워 찾을 수 있습니다. 대수 장치는 당신을 도울 수 있습니다.
3. 욕심 전략. 당신은 수학적으로 당신의 욕심 전략의 정확성을 확인할 수 있습니다. 그러나 종종 필기 시험, 제한된 시간 동안 시험에서 비현실적이다 않습니다. 로그는 확인할 수 있습니다.

그리고 개념의 수의 사용 :
1. 당신이 방법 A를 감지있다;
2도 절대적으로 올바른 나쁜 방법의 B를 복잡도를 구현,
3. 무작위 표본 생성기를 구현;
4. 구현 정렬 ;
5. B 및 방법 여러번의 방법은 인증 방법은 정확한 일치하도록
제있는 경우 이러한 샘플 정렬 오차, 인쇄가 에러 샘플 분석 방법
시험은 여전히 정확하면 샘플 수 자주보다 7. 방법을 결정할 수 올바르게하고있다

방법을 이용하여 다음의 세 가지 예 (거품 정렬, 삽입 정렬 및 선택 일종)의 기재 번호 :
1 거품 정렬 : 버블 정렬 아 개의 기본적인 아이디어는 매우 인접 수를 비교 끊임없이 큰 원소 항상 역방향. 비교 후, 다음이 배열의 마지막에 (오름차순) 최대 수를 선택 한 다음 작업 중 다음 번을 반복하지만, 일단 상대적으로 감소, 마지막 숫자 멀리 넣어왔다 이동하지 않습니다, 다음 순위 상승을 얻을 재활용 다음에 최종 표면이 라운드에서 이번 라운드의 최대 수를, 밖으로 찾을 수 있습니다.

package basic_class_01;

import java.util.Arrays;

public class Code_00_BubbleSort {

	public static void bubbleSort(int[] arr) {
		if (arr == null || arr.length < 2) {
			return;
		}
		for (int e = arr.length - 1; e > 0; e--) {
			for (int i = 0; i < e; i++) {
				if (arr[i] > arr[i + 1]) {
					swap(arr, i, i + 1);
				}
			}
		}
	}

	public static void swap(int[] arr, int i, int j) {
		arr[i] = arr[i] ^ arr[j];
		arr[j] = arr[i] ^ arr[j];
		arr[i] = arr[i] ^ arr[j];
	}

	// for test
	public static void comparator(int[] arr) {
		Arrays.sort(arr);
	}

	// for test
	public static int[] generateRandomArray(int maxSize, int maxValue) {
		int[] arr = new int[(int) ((maxSize + 1) * Math.random())];
		for (int i = 0; i < arr.length; i++) {
			arr[i] = (int) ((maxValue + 1) * Math.random()) - (int) (maxValue * Math.random());
		}
		return arr;
	}

	// for test
	public static int[] copyArray(int[] arr) {
		if (arr == null) {
			return null;
		}
		int[] res = new int[arr.length];
		for (int i = 0; i < arr.length; i++) {
			res[i] = arr[i];
		}
		return res;
	}

	// for test
	public static boolean isEqual(int[] arr1, int[] arr2) {
		if ((arr1 == null && arr2 != null) || (arr1 != null && arr2 == null)) {
			return false;
		}
		if (arr1 == null && arr2 == null) {
			return true;
		}
		if (arr1.length != arr2.length) {
			return false;
		}
		for (int i = 0; i < arr1.length; i++) {
			if (arr1[i] != arr2[i]) {
				return false;
			}
		}
		return true;
	}

	// for test
	public static void printArray(int[] arr) {
		if (arr == null) {
			return;
		}
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + " ");
		}
		System.out.println();
	}

	// for test
	public static void main(String[] args) {
		int testTime = 500000;
		int maxSize = 100;
		int maxValue = 100;
		boolean succeed = true;
		for (int i = 0; i < testTime; i++) {
			int[] arr1 = generateRandomArray(maxSize, maxValue);
			int[] arr2 = copyArray(arr1);
			bubbleSort(arr1);
			comparator(arr2);
			if (!isEqual(arr1, arr2)) {
				succeed = false;
				break;
			}
		}
		System.out.println(succeed ? "Nice!" : "Fucking fucked!");

		int[] arr = generateRandomArray(maxSize, maxValue);
		printArray(arr);
		bubbleSort(arr);
		printArray(arr);
	}

}

2. 정렬 : 수의 위치를 기록, 즉시 위치 번호를 변경하지 않지만, 라운드의 최소 수를 찾기 위해, 또한 짝 비교의 또 다른 라운드 후, 버블 개선으로 볼 수있는 정렬 방법을 선택합니다 (즉, 배열 첨자)는, 현재 라운드가 완료 될 때까지, 대신에 원형 교환의 최소 수로 교환 할 수있다. 그리고 줄 번호를 찾을 수 있습니다.

package basic_class_01;

import java.util.Arrays;

public class Code_02_SelectionSort {

	public static void selectionSort(int[] arr) {
		if (arr == null || arr.length < 2) {
			return;
		}
		for (int i = 0; i < arr.length - 1; i++) {
			int minIndex = i;
			for (int j = i + 1; j < arr.length; j++) {
				minIndex = arr[j] < arr[minIndex] ? j : minIndex;
			}
			swap(arr, i, minIndex);
		}
	}

	public static void swap(int[] arr, int i, int j) {
		int tmp = arr[i];
		arr[i] = arr[j];
		arr[j] = tmp;
	}

	// for test
	public static void comparator(int[] arr) {
		Arrays.sort(arr);
	}

	// for test
	public static int[] generateRandomArray(int maxSize, int maxValue) {
		int[] arr = new int[(int) ((maxSize + 1) * Math.random())];
		for (int i = 0; i < arr.length; i++) {
			arr[i] = (int) ((maxValue + 1) * Math.random()) - (int) (maxValue * Math.random());
		}
		return arr;
	}

	// for test
	public static int[] copyArray(int[] arr) {
		if (arr == null) {
			return null;
		}
		int[] res = new int[arr.length];
		for (int i = 0; i < arr.length; i++) {
			res[i] = arr[i];
		}
		return res;
	}

	// for test
	public static boolean isEqual(int[] arr1, int[] arr2) {
		if ((arr1 == null && arr2 != null) || (arr1 != null && arr2 == null)) {
			return false;
		}
		if (arr1 == null && arr2 == null) {
			return true;
		}
		if (arr1.length != arr2.length) {
			return false;
		}
		for (int i = 0; i < arr1.length; i++) {
			if (arr1[i] != arr2[i]) {
				return false;
			}
		}
		return true;
	}

	// for test
	public static void printArray(int[] arr) {
		if (arr == null) {
			return;
		}
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + " ");
		}
		System.out.println();
	}

	// for test
	public static void main(String[] args) {
		int testTime = 500000;
		int maxSize = 100;
		int maxValue = 100;
		boolean succeed = true;
		for (int i = 0; i < testTime; i++) {
			int[] arr1 = generateRandomArray(maxSize, maxValue);
			int[] arr2 = copyArray(arr1);
			selectionSort(arr1);
			comparator(arr2);
			if (!isEqual(arr1, arr2)) {
				succeed = false;
				printArray(arr1);
				printArray(arr2);
				break;
			}
		}
		System.out.println(succeed ? "Nice!" : "Fucking fucked!");

		int[] arr = generateRandomArray(maxSize, maxValue);
		printArray(arr);
		selectionSort(arr);
		printArray(arr);
	}

}

3. 정렬 : 삽입 정렬은 매우 빠른 정렬 알고리즘, 그리고 원리는 간단하고 컴팩트 한 구조이다. 그 원리는 : 마지막 요소 등 새로운 분류 순서를 형성, 두 번째 순서 A의 번호, A, 이전에 삽입 된 행 좋은 순서부터 시작합니다.

package basic_class_01;

import java.util.Arrays;

public class Code_01_InsertionSort {

	public static void insertionSort(int[] arr) {
		if (arr == null || arr.length < 2) {
			return;
		}
		for (int i = 1; i < arr.length; i++) {
			for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {
				swap(arr, j, j + 1);
			}
		}
	}

	public static void swap(int[] arr, int i, int j) {
		arr[i] = arr[i] ^ arr[j];
		arr[j] = arr[i] ^ arr[j];
		arr[i] = arr[i] ^ arr[j];
	}

	// for test
	public static void comparator(int[] arr) {
		Arrays.sort(arr);
	}

	// for test
	public static int[] generateRandomArray(int maxSize, int maxValue) {
		int[] arr = new int[(int) ((maxSize + 1) * Math.random())];
		for (int i = 0; i < arr.length; i++) {
			arr[i] = (int) ((maxValue + 1) * Math.random()) - (int) (maxValue * Math.random());
		}
		return arr;
	}

	// for test
	public static int[] copyArray(int[] arr) {
		if (arr == null) {
			return null;
		}
		int[] res = new int[arr.length];
		for (int i = 0; i < arr.length; i++) {
			res[i] = arr[i];
		}
		return res;
	}

	// for test
	public static boolean isEqual(int[] arr1, int[] arr2) {
		if ((arr1 == null && arr2 != null) || (arr1 != null && arr2 == null)) {
			return false;
		}
		if (arr1 == null && arr2 == null) {
			return true;
		}
		if (arr1.length != arr2.length) {
			return false;
		}
		for (int i = 0; i < arr1.length; i++) {
			if (arr1[i] != arr2[i]) {
				return false;
			}
		}
		return true;
	}

	// for test
	public static void printArray(int[] arr) {
		if (arr == null) {
			return;
		}
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + " ");
		}
		System.out.println();
	}

	// for test
	public static void main(String[] args) {
		int testTime = 500000;
		int maxSize = 100;
		int maxValue = 100;
		boolean succeed = true;
		for (int i = 0; i < testTime; i++) {
			int[] arr1 = generateRandomArray(maxSize, maxValue);
			int[] arr2 = copyArray(arr1);
			insertionSort(arr1);
			comparator(arr2);
			if (!isEqual(arr1, arr2)) {
				succeed = false;
				break;
			}
		}
		System.out.println(succeed ? "Nice!" : "Fucking fucked!");

		int[] arr = generateRandomArray(maxSize, maxValue);
		printArray(arr);
		insertionSort(arr);
		printArray(arr);
	}

}

추천

출처blog.csdn.net/hnu_zzt/article/details/88221753