빠른 정렬 방법은 주로 Array.Sort ()를 사용하여 구현합니다.
기포 방법은 트래버스 어레이를 사용하여 비교하고 연속 비교를 통해 최소 또는 최대 값을 하나씩 가로 지르는 것입니다.
선택 분류 방법은 배열의 첫 번째 데이터를 가장 크거나 작은 값으로 사용한 다음 비교 루프를 통해 순서대로 배열을 출력하는 것입니다.
삽입 정렬은 배열에서 데이터를 선택하고 끊임없이 삽입하고 비교하여 끝에 정렬하는 것입니다.
코드 사본은 다음과 같습니다.
패키지 com.firewolf.sort;
공개 클래스 MySort {
/**
* @param args
*/
public static void main (String [] args) {
int array [] = {45,32,54,12,43,65,11,3,33,33,90,44,178};
mySort mySort = new mySort ();
mysort.insertsort (배열);
System.out.print ( "삽입 정렬 결과 :");
mysort.printarray (배열);
System.out.println ();
mySort.Bubblesort (배열);
System.out.print ( "버블 정렬 결과 :");
mysort.printarray (배열);
mysort.qsort (배열);
System.out.println ();
System.out.print ( "빠른 정렬 결과 :");
mysort.printarray (배열);
mysort.shellsort (배열);
System.out.println ();
System.out.print ( "힐 정렬 결과 :");
mysort.printarray (배열);
mySort.SelectSort (배열);
System.out.println ();
System.out.print ( "정렬 결과 선택 :");
mysort.printarray (배열);
}
/**
* 직접 삽입 정렬
* 기본 아이디어 : 정렬 할 숫자 세트에서 이전 (n-1) [n> = 2] 숫자가 이미 순서대로 가정했다고 가정하면 이제 n 번째 숫자를 이전 순서의 순서 숫자에 삽입해야합니다. 이것은이 n 숫자를 순서대로 정렬하게 만듭니다. 모든 것이 순서대로 배열 될 때 까지이주기를 반복하십시오
*/
public void insertsort (int [] array) {
int temp = 0;
for (int i = 1; i <array.length; i ++) {
int j = i-1;
온도 = 배열 [i];
for (; j> = 0 && temp <배열 [j]; j-) {
배열 [j+1] = 배열 [J];
}
배열 [j+1] = 온도;
}
}
/**
* 버블 정렬
* 기본 아이디어 : 정렬 할 숫자 세트에서, 두 개의 인접한 숫자를 위에서 아래로 비교하고 조정하여 더 큰 숫자를 가라 앉히고 작은 것들이 올라갑니다. 즉, 두 개의 인접한 숫자가 비교되어 분류가 분류 요구 사항과 반대되는 것으로 나타 났을 때마다 상호 교환됩니다.
*/
public void bubblesort (int [] array) {
int 온도;
for (int i = 0; i <array.length; i ++) {// 트립 수
for (int j = 0; j <array.length-i-1; j ++) {// 비교 수
if (배열 [j]> 배열 [j+1]) {
임시 = 배열 [j];
배열 [j] = 배열 [j+1];
배열 [j+1] = 온도;
}
}
}
}
/**
* 빠른 정렬
* 기본 아이디어 : 벤치 마크 요소, 일반적으로 첫 번째 요소 또는 마지막 요소를 선택하고 스캔을 통해 시퀀스를 나누어 벤치 마크 요소보다 작고 일부는 더 크거나 동일합니다. 벤치 마크 요소 요소.
* @param 배열
*/
public void qsort (int array []) {
if (array.length> 1) {
_QSORT (Array, 0, Array.Length-1);
}
}
/**
* 한 번의 여행을위한 빠른 분류
* @param 배열
*/
private void _qsort (int [] array, int low, int high) {
if (낮음 <높음) {
int middle = getmiddle (배열, 낮음, 높음);
_QSORT (배열, 낮음, 중간 1);
_QSORT (배열, 중간+1, 높음);
}
}
/**
* 중간 값을 얻으십시오
*/
private int getMiddle (int [] 배열, int low, int high) {
int tmp = 배열 [낮음];
while (낮음 <높음) {
while (low <high && array [high]> = tmp)
높은--;
배열 [LOW] = 배열 [높음];
while (low <high && array [low] <= tmp)
낮은 ++;
배열 [High] = 배열 [낮음];
}
배열 [LOW] = TMP;
낮게 반환;
}
/**
* 간단한 선택 정렬
* 기본 아이디어 : 정렬 할 숫자 세트 중에서 가장 작은 숫자를 선택하고 첫 번째 위치에서 숫자와 교환 한 다음 나머지 숫자 중 두 번째 위치와 교환 한 다음이에서 루프하십시오. 두 번째 숫자가 마지막 숫자와 비교 될 때까지 방법.
* @param 배열
*/
public void selectSort (int [] array) {
int 위치 = 0;
for (int i = 0; i <array.length; i ++) {
int j = i+1;
위치 = i;
int temp = 배열 [i];
for (; j <array.length; j ++) {
if (배열 [j] <temp) {
임시 = 배열 [j];
위치 = j;
}
}
배열 [위치] = 배열 [i];
배열 [i] = 온도;
}
}
/**
* 언덕 정렬 (최소 증분 정렬)
* 기본 아이디어 : 알고리즘은 먼저 특정 증분 d (n/2, n은 정렬 할 숫자 수)에 따라 여러 그룹으로 분류 할 수 있으며 각 그룹에 기록 된 첨자는 d와 다릅니다. 각 그룹에 대해 모든 요소는 직접 정렬 된 다음 더 작은 증분 (d/2)으로 그룹화 한 다음 각 그룹에서 직접 정렬합니다. 증분이 1으로 감소되면 직접 삽입 정렬이 수행 된 후에 분류가 완료됩니다.
* @param 배열
*/
public void shellsort (int [] array) {
Double D1 = Array.Length;
int temp = 0;
while (true) {
d1 = math.ceil (d1/2);
int d = (int) d1;
for (int x = 0; x <d; x ++) {
for (int i = x+d; i <array.length; i+= d) {
int j = id;
온도 = 배열 [i];
for (; j> = 0 && temp <배열 [j]; j- = d) {
배열 [j+d] = 배열 [j];
}
배열 [j+d] = 온도;
}
}
if (d == 1)
부서지다;
}
}
/**
* 배열의 모든 요소를 인쇄합니다
*/
public void printArray (int [] array) {
for (int i = 0; i <array.length; i ++) {
System.out.print (배열 [i]+"");
}
}
}
다음은 별도로 사용되는 분류 방법의 몇 가지 예입니다
배열과 함께 정렬 방법을 사용한 빠른 정렬
코드 사본은 다음과 같습니다.
import java.util.arrays;
공개 수업 test2 {
public static void main (String [] args) {
int [] a = {5,4,2,4,9,1};
arrays.sort (a);
for (int i : a) {
System.out.print (i);
}
}
}
버블 분류 알고리즘
코드 사본은 다음과 같습니다.
public static int [] bubblesort (int [] args) {// 버블 분류 알고리즘
for (int i = 0; i <args.length-1; i ++) {
for (int j = i+1; j <args.length; j ++) {
if (args [i]> args [j]) {
int temp = args [i];
args [i] = args [j];
args [j] = 온도;
}
}
}
반환 args;
}
정렬 알고리즘을 선택하십시오
코드 사본은 다음과 같습니다.
public static int [] selectsort (int [] args) {// 정렬 알고리즘을 선택합니다
for (int i = 0; i <args.length-1; i ++) {
int min = i;
for (int j = i+1; j <args.length; j ++) {
if (args [min]> args [j]) {
최소 = J;
}
}
if (min! = i) {
int temp = args [i];
args [i] = args [min];
args [min] = 온도;
}
}
반환 args;
}
정렬 알고리즘을 삽입하십시오
코드 사본은 다음과 같습니다.
public static int [] insertsort (int [] args) {// 정렬 알고리즘 삽입
for (int i = 1; i <args.length; i ++) {
for (int j = i; j> 0; j-) {
if (args [j] <args [j-1]) {
int temp = args [j-1];
args [j-1] = args [j];
args [j] = 온도;
} else break;
}
}
반환 args;
}
위는 Java의 네 가지 분류 방법입니다. 다른 방법마다 효율성이 다릅니다.
버블 정렬 : 비교 O (N2) 데이터 교환 O (N2)
정렬 선택 : O (N2) 데이터 교환 O (N) 비교
정렬 삽입 : O (N2) 데이터 복사 데이터 O (N)
실제 응용 분야에서는 효율적인 알고리즘을 선택해야합니다.