「ソート」を編集中

ナビゲーションに移動 検索に移動

警告: ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。ログインまたはアカウントを作成すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。

この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。

最新版 編集中の文章
1行目: 1行目:
'''ソート'''([[英語]]:sort)とは、一連の[[データ]]をある一定の[[順序]]に従って並べ替える処理である。
+
'''ソート'''(英語:sort)とは、一連の[[データ]]をある一定の[[順序]]に従って並べ替える処理である。
  
==主なソートアルゴリズム==
+
==主なソート[[アルゴリズム]]==
 
実装例は、[[整数]]を[[昇順]]に並べ替えるものを示す。
 
実装例は、[[整数]]を[[昇順]]に並べ替えるものを示す。
 
===バブルソート===
 
===バブルソート===
[[バブルソート]]は最も単純なソートの一つ。前から順番に隣り合う要素を比較して、大小関係が目標の順序と異なったら入れ替える。
+
最も単純なソートの一つ。前から順番に隣り合う要素を比較して、大小関係が目標の順序と異なったら入れ替える。
 
<source lang="c">
 
<source lang="c">
void sort(int a[], int num) {
+
void sort(int a[],int num) {
int i, j, t;
+
int i,j;
for ( j = num - 1; j > 0; j-- ) {
+
for(j=num-1;j>0;j--) {
for ( i = 0; i < j; i++ ) {
+
for(i=0;i<j;i++) {
if ( a[i] > a[i+1] ) {
+
if(a[i]>a[i+1]) {
t = a[i];
+
int temp=a[i];
a[i] = a[i+1];
+
a[i]=a[i+1];
a[i+1] = t;
+
a[i+1]=temp;
        }
 
 
}
 
}
 
}
 
}
22行目: 21行目:
  
 
===挿入ソート===
 
===挿入ソート===
[[挿入ソート]]は、これまで並べ替えた部分に、その直後の要素を目標の順序に合う位置に挿入する。
+
これまで並べ替えた部分に、その直後の要素を目標の順序に合う位置に挿入する。
通常は[[バブルソート]]と同じ[[計算量]]とみなされるが、ソート済みの[[配列]]をソートする場合に高速。
+
通常はバブルソートと同じ[[計算量]]とみなされるが、ソート済みの配列をソートする場合に高速。
 
<source lang="c">
 
<source lang="c">
 
void sort(int a[],int num) {
 
void sort(int a[],int num) {
37行目: 36行目:
  
 
===ヒープソート===
 
===ヒープソート===
[[ヒープソート]]は、要素を一旦全て[[ヒープ]]に放り込み、根の要素を順に取り出すことによりソートする。
+
要素を一旦全てヒープに放り込み、根の要素を順に取り出すことによりソートする。
 
実装が若干複雑な割にあまり高速ではない。
 
実装が若干複雑な割にあまり高速ではない。
 
<source lang="c">
 
<source lang="c">
106行目: 105行目:
  
 
===シェルソート===
 
===シェルソート===
[[シェルソート]]は、[[挿入ソート]]に似ているが、初めは広い間隔でソートを行い、徐々に間隔を狭くしていく。
+
挿入ソートに似ているが、初めは広い間隔でソートを行い、徐々に間隔を狭くしていく。
[[クイックソート]]の登場前は最速のソートと言われていたらしい。
+
クイックソートの登場前は最速のソートと言われていたらしい。
 
<source lang="c">
 
<source lang="c">
 
void sort(int a[],int num) {
 
void sort(int a[],int num) {
129行目: 128行目:
  
 
===マージソート===
 
===マージソート===
[[マージソート]]は、[[配列]]を短く分割し、徐々に併合していくことでソートを行う。
+
配列を短く分割し、徐々に併合していくことでソートを行う。
 
[[キャラソート]]でも採用されているらしい<ref>http://marineturtle.sakura.ne.jp/script/sort/hpsort/mergesort_exp.html</ref>。
 
[[キャラソート]]でも採用されているらしい<ref>http://marineturtle.sakura.ne.jp/script/sort/hpsort/mergesort_exp.html</ref>。
  
147行目: 146行目:
  
 
===クイックソート===
 
===クイックソート===
[[クイックソート]]は、まず要素の中から適当に[[ピポット]]と呼ばれる基準値を設定し、ピポット未満の要素とピポット以上の要素に分ける。
+
まず要素の中から適当にピポットと呼ばれる基準値を設定し、ピポット未満の要素とピポット以上の要素に分ける。
 
分けた要素をそれぞれ同じようにソートし、ピポット未満の要素をソートしたものの後ろにピポット以上の要素をソートしたものをくっつける。
 
分けた要素をそれぞれ同じようにソートし、ピポット未満の要素をソートしたものの後ろにピポット以上の要素をソートしたものをくっつける。
  
[[データ]]と実装によっては遅くなることがあるが、いくつかの改善法がある。
+
データと実装によっては遅くなることがあるが、いくつかの改善法がある。
  
 
[[Haskell]]での記述例
 
[[Haskell]]での記述例
161行目: 160行目:
  
 
===基数ソート===
 
===基数ソート===
[[基数ソート]]は、小さい桁から大きな桁の順に見ていき、それぞれについて安定なソートを行う。
+
小さい桁から大きな桁の順に見ていき、それぞれについて安定なソートを行う。
 
データの種類が限られるが、特にデータ数が多い時に高速にソートできることがある。
 
データの種類が限られるが、特にデータ数が多い時に高速にソートできることがある。
 
<source lang="cpp">
 
<source lang="cpp">
188行目: 187行目:
  
 
=== スリープソート ===
 
=== スリープソート ===
[[スリープソート]]はソートの最終系と言われる[[アルゴリズム]]である。
+
ソートの最終系と言われるアルゴリズムである。
  
 
詳細は「[[スリープソート]]」の項目を参照。
 
詳細は「[[スリープソート]]」の項目を参照。

MonoBookへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細はMonoBook:著作権を参照)。 著作権保護されている作品は、許諾なしに投稿しないでください!

このページを編集するには、下記の確認用の質問に回答してください (詳細):

取り消し 編集の仕方 (新しいウィンドウで開きます)

このページで使用されているテンプレート:

このページは 1 個の隠しカテゴリに属しています: