SlideShare uma empresa Scribd logo
1 de 40
Baixar para ler offline
プロコン練習会:
ソート(整列)
ソート(整列)とは?
データの持つ値を昇順,もしくは降順に並び替え
ること
例:A = {3, 6, 9, 2, 1, 5} → {1, 2, 3, 5, 6, 9}
ソート(整列)とは?
データの持つ値を昇順,もしくは降順に並び替え
ること
例:A = {3, 6, 9, 2, 1, 5} → {1, 2, 3, 5, 6, 9}
このような前処理を行うことで1回の何かしらの

操作を高速で行えるようになる.(値の検索など)
挿入ソート
1 2 3 6 5 4
挿入ソート
1 2 3 6 5 4
1 2 3 5 6 4
挿入ソート
1 2 3 5 6 4
1 2 3 4 5 6
挿入ソート
どんなアルゴリズムで並び替えているのか?
挿入ソート
どんなアルゴリズムで並び替えているのか?

・途中まではうまくソートされていた.

・ソートされていない値が現れたらその値を適切
な位置に挿入していく.
基本的にやることはこれだけ!!
挿入ソート
1 2 3 6 5 4
ソート済み
挿入ソート
1 2 3 6 5 4
ソート済み
挿入ソート
1 2 3 6 5 4
ソートされていない
挿入ソート
1 2 3 6 5 4
ソートされていない
5が入って欲しい位置
挿入ソート
1 2 3 65 4
ソートされていない
挿入!!
挿入ソート
1 2 3 5 6 4
ソート済み
計算量
時間計算量:O(n2)

n:カードの枚数
カード一枚を並び替えるのに最悪でn回の比較を
行うのでn*n = n2になる.
コード
バブルソート
3 4 1 6 5 2
バブルソート
3 4 1 6 5 2
比較
バブルソート
3 4 1 6 2 5
交換
バブルソート
3 4 1 6 2 5
比較
バブルソート
3 4 1 2 6 5
交換
バブルソート
3 4 1 2 6 5
比較
バブルソート
3 4 1 2 6 5
比較
バブルソート
3 1 4 2 6 5
交換
バブルソート
3 1 4 2 6 5
比較
バブルソート
1 3 4 2 6 5
交換
バブルソート
1 3 4 2 6 5
この部分に対して同じ操作をする
バブルソート
1回の操作で赤枠の中の最小の値が一番左に来る.
よって,n回の操作でソートが完了する
時間計算量:O(n2)
コード
選択ソート
1 3 4 2 6 5
選択ソート
1 3 4 2 6 5
最小値
選択ソート
1 3 4 2 6 5
移動
選択ソート
1 3 4 2 6 5
最小値
選択ソート
1 2 4 3 6 5
移動
選択ソート
まだソートされていない範囲から最小の値を選ん
で一番左に持って来る.
時間計算量:O(n2)
最小の値を選ぶのにO(n),ソートされるまでにこ
れをn回行うのでO(n2)となる.
コード
安定ソート
安定ソートとはソートのアルゴリズムの中で同等
のデータの順序がソート前とソート後で変わらな
いソートのことである.
これまで紹介したソートは全て安定なソートであ
る.
プロコンで使うソート
今回紹介はしていないがプロコンでよく使う

ソートはクイックソートと呼ばれるO(n*log n)の
ソートアルゴリズムである.
気になる人は「クイックソート アルゴリズム」
でググると色々出てくると思います.
使い方
C++
他のソート
基数ソート:O(n*log n)
シェルソート:O(n1.25)
マージソート:O(n*log n)
バケットソート:O(n)

Mais conteúdo relacionado

Mais de HCPC: 北海道大学競技プログラミングサークル

Mais de HCPC: 北海道大学競技プログラミングサークル (20)

写像 12 相
写像 12 相写像 12 相
写像 12 相
 
ACPC 2017 Day3 F: 掛け算は楽しい
ACPC 2017 Day3 F: 掛け算は楽しいACPC 2017 Day3 F: 掛け算は楽しい
ACPC 2017 Day3 F: 掛け算は楽しい
 
ACPC 2017 Day3 D: 優柔不断
ACPC 2017 Day3 D: 優柔不断ACPC 2017 Day3 D: 優柔不断
ACPC 2017 Day3 D: 優柔不断
 
ACPC 2019 Day3 G: Restricted DFS
ACPC 2019 Day3 G: Restricted DFSACPC 2019 Day3 G: Restricted DFS
ACPC 2019 Day3 G: Restricted DFS
 
ACPC 2019 Day3 F: 部分文字列分解
ACPC 2019 Day3 F: 部分文字列分解ACPC 2019 Day3 F: 部分文字列分解
ACPC 2019 Day3 F: 部分文字列分解
 
ACPC 2019 Day3 E: 総和の切り取り
ACPC 2019 Day3 E: 総和の切り取りACPC 2019 Day3 E: 総和の切り取り
ACPC 2019 Day3 E: 総和の切り取り
 
ACPC 2019 Day3 B: パフェ
ACPC 2019 Day3 B: パフェACPC 2019 Day3 B: パフェ
ACPC 2019 Day3 B: パフェ
 
ACPC 2019 Day3 A: 間違い探し
ACPC 2019 Day3 A: 間違い探しACPC 2019 Day3 A: 間違い探し
ACPC 2019 Day3 A: 間違い探し
 
HUPC 2019 Day2 G: 木
HUPC 2019 Day2 G: 木HUPC 2019 Day2 G: 木
HUPC 2019 Day2 G: 木
 
HUPC 2019 Day2 E: ジャム
HUPC 2019 Day2 E: ジャムHUPC 2019 Day2 E: ジャム
HUPC 2019 Day2 E: ジャム
 
HUPC 2019 Day2 H: Revenge of UMG
HUPC 2019 Day2 H: Revenge of UMGHUPC 2019 Day2 H: Revenge of UMG
HUPC 2019 Day2 H: Revenge of UMG
 
HUPC 2019 Day2 F: MOD Rush
HUPC 2019 Day2 F: MOD RushHUPC 2019 Day2 F: MOD Rush
HUPC 2019 Day2 F: MOD Rush
 
HUPC 2019 Day2 C: 串刺し
HUPC 2019 Day2 C: 串刺しHUPC 2019 Day2 C: 串刺し
HUPC 2019 Day2 C: 串刺し
 
HUPC 2019 Day1 F: グリッドの番号
HUPC 2019 Day1 F: グリッドの番号HUPC 2019 Day1 F: グリッドの番号
HUPC 2019 Day1 F: グリッドの番号
 
HUPC 2019 Day1 E: 最短経路の復元
HUPC 2019 Day1 E: 最短経路の復元HUPC 2019 Day1 E: 最短経路の復元
HUPC 2019 Day1 E: 最短経路の復元
 
HUPC 2019 Day1 D: 貪欲が最適?
HUPC 2019 Day1 D: 貪欲が最適?HUPC 2019 Day1 D: 貪欲が最適?
HUPC 2019 Day1 D: 貪欲が最適?
 
HUPC 2019 Day1 C: 短絡評価
HUPC 2019 Day1 C: 短絡評価HUPC 2019 Day1 C: 短絡評価
HUPC 2019 Day1 C: 短絡評価
 
HUPC 2019 Day1 B: 自身の 2 倍
HUPC 2019 Day1 B: 自身の 2 倍HUPC 2019 Day1 B: 自身の 2 倍
HUPC 2019 Day1 B: 自身の 2 倍
 
HUPC 2019 Day1 A: four tea
HUPC 2019 Day1 A: four teaHUPC 2019 Day1 A: four tea
HUPC 2019 Day1 A: four tea
 
Convex Hull Trick
Convex Hull TrickConvex Hull Trick
Convex Hull Trick
 

ソート