[정상] 순간 데이터 구조 상용 정렬 알고리즘 습득

본 고 는 학습 중의 총 결 입 니 다. 전재 하 는 것 을 환영 하지만 출처 를 밝 혀 주 십시오.http://blog.csdn.net/pistolove/article/details/40625351
다음은 JAVA 코드 로 구현 되 는 데이터 구조 중 7 가지 기본 정렬 알고리즘 입 니 다. 도움 이 되 셨 으 면 합 니 다.
(1) 정렬 직접 삽입
	/**        **/
	/**        ,        **/
	public static void insertSort(int[] table) {
		/** n-1    **/
		for (int i = 1; i < table.length; i++) {
			/**    table[i]             **/
			int temp = table[i], j;
			/**             **/
			for (j = i - 1; j > -1 && temp < table[j]; j--) {
				table[j + 1] = table[j];
			}
			/** temp        **/
			table[j + 1] = temp;
		}
	}

(2) 힐 정렬
<span style="white-space:pre">	</span>/**      **/
	public static void shellSort(int[] table) {
		/**     ,    ,      **/
		for (int delta = table.length / 2; delta > 0; delta /= 2) {
			/**       ,                    **/
			for (int i = delta; i < table.length; i++) {
				/**         **/
				int temp = table[i];
				/**   delta  **/
				int j = i - delta;
				/**                **/
				/**            **/
				while (j >= 0 && temp < table[j]) {
					table[j + delta] = table[j];
					j -= delta;
				}
				/**        **/
				table[j + delta] = temp;
			}
		}
	}

(3) 거품 정렬
<span style="white-space:pre">	</span>/**      **/
	public static void bubbleSort(int[] table) {
		/**         **/
		boolean exchange = true;
		/**           ,  n-1  **/
		for (int i = 1; i < table.length && exchange; i++) {
			/**         **/
			exchange = false;
			/**     、   **/
			for (int j = 0; j < table.length - i; j++) {
				/**    ,   **/
				if (table[j] > table[j + 1]) {
					int temp = table[j];
					table[j] = table[j + 1];
					table[j + 1] = temp;
					/**     **/
					exchange = true;
				}
			}
		}
	}

(4) 빠 른 정렬
<span style="white-space:pre">	</span>/**      **/
	public static void quickSort(int[] table) {
		quickSort(table, 0, table.length - 1);
	}

	/**       ,     **/
	private static void quickSort(int[] table, int low, int high) { // low、high          
		/**      **/
		if (low < high) {
			int i = low, j = high;
			/**           **/
			int vot = table[i];
			/**      **/
			while (i != j) {
				/**           **/
				while (i < j && vot <= table[j])
					j--;
				if (i < j) {
					/**          **/
					table[i] = table[j];
					i++;
				}
				/**           **/
				while (i < j && table[i] < vot)
					i++;
				if (i < j) {
					/**          **/
					table[j] = table[i];
					j--;
				}
			}
			/**          **/
			table[i] = vot;
			/**          **/
			quickSort(table, low, j - 1);
			/**          **/
			quickSort(table, i + 1, high);
		}
	}

(5) 정렬 직접 선택
<span style="white-space:pre">	</span>/**        **/
	public static void selectSort(int[] table) {
		/** n-1    **/
		for (int i = 0; i < table.length - 1; i++) {
			/**     table[i]              **/
			/**   i        **/
			int min = i;
			/**            **/
			for (int j = i + 1; j < table.length; j++)
				if (table[j] < table[min])
					/**          **/
					min = j;
			/**              **/
			if (min != i) {
				int temp = table[i];
				table[i] = table[min];
				table[min] = temp;
			}
		}
	}

(6) 더미 정렬
<span style="white-space:pre">	</span>/**     **/
	public static void heapSort(int[] table) {
		int n = table.length;
		/**       **/
		for (int j = n / 2 - 1; j >= 0; j--)
			sift(table, j, n - 1);
		/**            ,      **/
		for (int j = n - 1; j > 0; j--) {
			int temp = table[0];
			table[0] = table[j];
			table[j] = temp;
			sift(table, 0, j - 1);
		}
	}

	/**   low            **/
	private static void sift(int[] table, int low, int high) {
		/** low、high         **/
		/**      **/
		int i = low;
		/** j i       **/
		int j = 2 * i + 1;
		/**    i      **/
		int temp = table[i];
		/**              **/
		while (j <= high) {
			/**       (  <    ) **/
			if (j < high && table[j] > table[j + 1])
				/** j          **/
				j++;
			/**         (  <    ) **/
			if (temp > table[j]) {
				/**             **/
				table[i] = table[j];
				/** i、j     **/
				i = j;
				j = 2 * i + 1;
			} else
				j = high + 1;
		}
		/**                **/
		table[i] = temp;
	}

(7) 정렬
<span style="white-space:pre">	</span>/**      **/
	public static void mergeSort(int[] X) {
		/**          ,   1 **/
		int n = 1;
		/** Y     X   **/
		int[] Y = new int[X.length];
		do {
			/**     , X          Y  **/
			mergepass(X, Y, n);
			/**         **/
			n *= 2;

			if (n < X.length) {
				/**  Y           X  **/
				mergepass(Y, X, n);
				n *= 2;
			}
		} while (n < X.length);
	}

	/**      **/
	private static void mergepass(int[] X, int[] Y, int n) {
		int i = 0;
		while (i < X.length - 2 * n + 1) {
			merge(X, Y, i, i + n, n);
			i += 2 * n;
		}
		if (i + n < X.length)
			/**       **/
			merge(X, Y, i, i + n, n);
		else
			/**  X       Y  **/
			for (int j = i; j < X.length; j++)
				Y[j] = X[j];
	}

	/**      **/
	private static void merge(int[] X, int[] Y, int m, int r, int n) {
		int i = m, j = r, k = m;
		/**  X           Y  **/
		while (i < r && j < r + n && j < X.length)
			/**       Y  **/
			if (X[i] < X[j])
				Y[k++] = X[i++];
			else
				Y[k++] = X[j++];
		/**               Y  **/
		while (i < r)
			Y[k++] = X[i++];
		/**               Y  **/
		while (j < r + n && j < X.length)
			Y[k++] = X[j++];
	}

좋은 웹페이지 즐겨찾기