毎日少しのアルゴリズムを学ぶ-集計ソートアルゴリズム
1984 ワード
集計ソートアルゴリズム
定義#テイギ#
集計ソート(Merge sort,台湾訳:集計ソート)は、集計操作に確立された有効なソートアルゴリズムである.このアルゴリズムは分割法(Divide and Conquer)を用いた非常に典型的な応用である.
ステップ
1.マージされたシーケンスを格納するために使用される2つのソートされたシーケンスの合計サイズの申請スペース
2.2つのポインタを設定し、最初の位置はそれぞれ2つの並べ替えられたシーケンスの開始位置である
3.2つのポインタが指す要素を比較し、比較的小さい要素を選択してマージスペースに入れ、ポインタを次の位置に移動します.
4.あるポインタがシーケンスの最後に達するまで手順3を繰り返す
5.他のシーケンスの残りのすべての要素を連結シーケンスの最後に直接コピーする
時間の複雑さ
O(nlogn)
コード#コード#
しゅつりょく
定義#テイギ#
集計ソート(Merge sort,台湾訳:集計ソート)は、集計操作に確立された有効なソートアルゴリズムである.このアルゴリズムは分割法(Divide and Conquer)を用いた非常に典型的な応用である.
ステップ
1.マージされたシーケンスを格納するために使用される2つのソートされたシーケンスの合計サイズの申請スペース
2.2つのポインタを設定し、最初の位置はそれぞれ2つの並べ替えられたシーケンスの開始位置である
3.2つのポインタが指す要素を比較し、比較的小さい要素を選択してマージスペースに入れ、ポインタを次の位置に移動します.
4.あるポインタがシーケンスの最後に達するまで手順3を繰り返す
5.他のシーケンスの残りのすべての要素を連結シーケンスの最後に直接コピーする
時間の複雑さ
O(nlogn)
コード#コード#
package com.sprd.test.algorithm;
/**
* Copyright 2014 TJ SPREADTRUM TEST_AF All Right Reserved
*
* @author: hui.qian Created on 2014 11 27 9:09:13 Description:
*/
public class Mergesort {
public int[] sort(int[] a, int[] b) {
int[] merge = new int[a.length + b.length];
int indexA = 0;
int indexB = 0;
int i = 0;
while (indexA < a.length && indexB < b.length) {
if (a[indexA] <= b[indexB]) {
merge[i++] = a[indexA++];
} else {
merge[i++] = b[indexB++];
}
}
if (indexA == a.length) {
for (int j = indexB; indexB < b.length; indexB++) {
merge[i++] = b[indexB];
}
} else {
for (int j = indexA; indexA < a.length; indexA++) {
merge[i++] = b[indexA];
}
}
return merge;
}
public static void main(String[] args) {
int[] sortA = { 1, 3, 5, 7, 9 };
int[] sortB = { 2, 4, 6, 8, 10 };
Mergesort sorter = new Mergesort();
long start = System.currentTimeMillis();
int[] sorted = sorter.sort(sortA, sortB);
long end = System.currentTimeMillis();
System.out.println(" : " + (end - start));
System.out.println(" : ");
print(sortA);
print(sortB);
System.out.println(" : ");
print(sorted);
}
public static void print(int[] datas) {
for (int i = 0; i < datas.length; i++) {
System.out.print(datas[i] + " ");
}
System.out.println("");
}
}
しゅつりょく
: 0
:
1 3 5 7 9
2 4 6 8 10
:
1 2 3 4 5 6 7 8 9 10