blog

ソートのいくつかの実装

バブルソート挿入ソート並列ソートクイックソートヒープソート...

May 16, 2020 · 3 min. read
シェア

バブルソート

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

挿入ソート

 public static void insertSort(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){
 int temp = arr[i];
 arr[i] = arr[j];
 arr[j] = temp;
 }

合計ソート

 public static void moergeSort(int[] arr){
 if(arr == null || arr.length < 2){
 return;
 }
 mergeProcess(arr,0,arr.length-1);
 }
 public static void mergeProcess(int[] arr,int l,int r){
 if(l == r){
 return;
 }
 int mid = (l + r) / 2;
 mergeProcess(arr,l,mid);
 mergeProcess(arr,mid + 1,r);
 merge(arr,l,mid,r);
 }
 public static void merge(int[] arr,int l,int m,int r){
 int[] help = new int[r - l + 1];
 int i = 0;
 int p1 = l;
 int p2 = m + 1;
 while(p1 <= m && p2 <= r){
 help[i++] = arr[p1] < arr[p2] ? arr[p1++] : arr[p2++];
 }
 while(p1 <= m){
 help[i++] = arr[p1++];
 }
 while(p2 <= r){
 help[i++] = arr[p2++];
 }
 for(i = 0; i < help.length; i++){
 arr[l+i] = help[i];
 }
 }

クイックソート

public class QuickSort {
 public static void quickSort(int[] arr){
 if(arr == null || arr.length < 2){
 return;
 }
 quickSort(arr,0,arr.length - 1);
 }
 public static void quickSort(int[] arr,int l,int r){
 if(l < r){
 //ランダム高速ソート 時間計算量 O(N)* logN)
 swap(arr,l + (int)(Math.random() * (r - l + 1)),r);
 int[] p= partition(arr,l,r);
 quickSort(arr,l,p[0] -1);
 quickSort(arr,p[1],r);
 }
 }
 public static int[] partition(int[] arr,int l,int r){
 int less = l - 1;
 int more = r;
 while(l < more){
 if(arr[l] < arr[r]){
 swap(arr,++less,l++);
 }else if(arr[l] > arr[r]){
 swap(arr,l,--more);
 }else{
 l++;
 }
 }
 return new int[]{less+1, more};
 }
 public static void swap(int[] arr,int l,int r){
 int temp = arr[l];
 arr[l] = arr[r];
 arr[r] = temp;
 }
}

ヒープソート

public class HeapSort {
 public static void heapSort(int[] arr){
 if(arr == null || arr.length < 2){
 return;
 }
 for(int i = 0;i < arr.length;i++){
 heapInsert(arr,i);
 }
 int size = arr.length;
 swap(arr,0,--size);
 while(size > 0){
 heapify(arr,0,size);
 swap(arr,0,--size);
 }
 }
 public static void heapInsert(int[] arr,int index){
 while(arr[index] > arr[(index -1 ) / 2]){
 swap(arr,index,(index-1) / 2);
 index = (index -1) / 2;
 }
 }
 public static void heapify(int[] arr,int index,int size){
 int left = index * 2 + 1;
 while(left < size){
 int largest = left + 1 < size && arr[left] < arr[left+1] ? left + 1 : left;
 largest = arr[largest] > arr[index] ? largest : index;
 if(largest == index){
 break;
 }
 swap(arr,largest,index);
 index = largest;
 left = index * 2 + 1;
 }
 }
 public static void swap(int[] arr,int i,int j){
 int temp = arr[i];
 arr[i] = arr[j];
 arr[j] = temp;
 }
}
Read next

4-Vueのライフサイクル

たとえば、データリスナーの設定、テンプレートのコンパイル、インスタンスのDOMへのマウント、データが変更されたときのDOMの更新などが必要です。また、このプロセス中に実行されるライフサイクルフックと呼ばれる関数があり、ユーザーはさまざまな段階で独自のコードを追加することができます。 これらの関数の中で、作成されたインスタンス、Moun...

May 16, 2020 · 2 min read