並べ替えを選択
基本的な考え方: ソートされたシーケンスの数をNとすると、iは1、2、3 ... n-1をとり、N-i + 1レコード(Ri、Ri + 1 .... Rn)から最小のソートコードを持つレコードを見つけます。 、i番目のレコードと交換し、N-1回実行した後にシーケンスの並べ替えを完了します。
private static void selectSort ( int [ ] arr, int n) {
for ( int i = 0 ; i < n - 1 ; ++ i) {
for ( int j = i + 1 ; j < n; ++ j) {
if ( arr[ i] > arr[ j] ) {
int t = arr[ i] ;
arr[ i] = arr[ j] ;
arr[ j] = t;
}
}
}
}
バブルソート
基本的な考え方: 隣接する要素をペアで比較し、逆の順序で交換します。毎回、最大または最小の要素が「浮き上がり」、最終的に順番に到達します。
private static void bubbleSort ( in[ ] arr, into n) {
for ( int i = 0 ; i < n - 1 ; ++ i) {
for ( int j = 0 ; j < n - 1 - i; ++ j) {
if ( arr[ j] > arr[ j + 1 ] ) {
int t = arr[ j] ;
arr[ j] = arr[ j + 1 ] ;
arr[ j + 1 ] = t;
}
}
}
}
マージソート
並べ替えられるレコードがすべて順序付けられたシーケンスになるまで、いくつかの順序付けられたシーケンスをペアで組み合わせます。
private static void mergeSort ( int [ ] arr, int n) {
mergeSort ( arr, 0 , n - 1 ) ;
}
private static void mergeSort ( int [ ] arr, int low, int high) {
if ( low < high) {
int mid = ( low + high) / 2 ;
mergeSort ( arr, low, mid) ;
mergeSort ( arr, mid + 1 , high) ;
merge ( arr, low, mid, high) ;
}
}
private static void merge ( int [ ] arr, int low, int mid, int high) {
int [ ] temp = new int [ high - low + 1 ] ;
int i = low;
int j = mid + 1 ;
int k = 0 ;
while ( i <= mid && j <= high) {
if ( arr[ i] < arr[ j] ) {
temp[ k++ ] = arr[ i++ ] ;
} else {
temp[ k++ ] = arr[ j++ ] ;
}
}
while ( i <= mid) {
temp[ k++ ] = arr[ i++ ] ;
}
while ( j <= high) {
temp[ k++ ] = arr[ j++ ] ;
}
for ( int k2 = 0 ; k2 < temp. length; k2++ ) {
arr[ k2 + low] = temp[ k2] ;
}
}
クイックソート
基本的な考え方: ソートするデータをワンパスソートによって2つの独立した部分に分割し、1つの部分のすべてのデータが他の部分のすべてのデータよりも小さい場合、この方法に従って2つの部分をすばやくソートします
private static void quickSoft ( int arr[ ] , int length) {
quickSoft ( arr, 0 , length - 1 ) ;
}
private static void quickSoft ( int arr[ ] , int low, int high) {
int pos;
if ( low < high) {
pos = partition ( arr, low, high) ;
quickSoft ( arr, low, pos - 1 ) ;
quickSoft ( arr, pos + 1 , high) ;
}
}
private static int partition ( int [ ] arr, int low, int high) {
int val = arr[ low] ;
while ( low < high) {
while ( low < high && arr[ high] >= val) {
-- high;
}
arr[ low] = arr[ high] ;
while ( low < high && arr[ low] <= val) {
++ low;
}
arr[ high] = arr[ low] ;
}
arr[ low] = val;
return low;
}
ソートを挿入
基本的な考え方: すべてのレコードがソートされるまで、ソートされるレコードがキーコードのサイズに従って順序付けされたシーケンスに挿入されるたび。
private static void insertSoft ( int [ ] arr, int n) {
for ( int i = 1 ; i < n; i++ ) {
int t = arr[ i] ;
int k = i;
for ( int j = i - 1 ; j >= 0 && arr[ j] > t; -- j) {
arr[ j + 1 ] = arr[ j] ;
k = j;
}
arr[ k] = t;
}
}