- 2
- 0
- 约6.46千字
- 约 26页
- 2016-09-21 发布于天津
- 举报
高速ソート-yamaguti.comp.ae.keio.ac.jp
* * * * * * * * * * * * * * * * * * * * * 高速ソートと安定結婚問題 平成24年12月14日 高速ソート 単純なソートアルゴリズム バブルソート O(n2) 選択ソート O(n2) 挿入ソート O(n2) もっと高速なソートアルゴリズムは? 計算量が O(n log n) のソートアルゴリズム クイックソート ヒープソート マージソート この中でクィックソートが最速 (ランダムデータに対して.不得手な場合もある) クイックソートの原理 まず、配列中の適当な要素を選ぶ → これを枢軸(pivot)と呼ぶ 次のように要素を並べ替える → これを分割(partition)という a[0] ?????????? a[v-1] a[v] a[v+1] ??? a[n-1] a[v]より小(以下) a[v] a[v]より大(以上) 考え方: 分割統治法(divide and conquer) では、a[0],???,a[v-1]の部分と、 a[v+1],???,a[n-1]の部分はどうするか? ↓ ピボットの選択 →分割を再帰的に繰り返せばよい! クィックソートのアルゴリズム概観 ①ソートするデータ区間のデータを得る ②区間内のデータ数が2以下の時2-1:データ数が1以下の時なにもしない2-2:データ数が2の時,必要なら交換 ③区間内のデータ数が3以上の時3-1:区間内でピボットを選ぶ(便宜的に右端)3-2:区間内で,ピボットより小さい区間(左半分)と大きい区間(右半分)に分割する3-3:3-2の両区間を再帰的処理する /* 配列aのうち a[l]~a[r] を整列する */ quick_sort ( int a[ ], int l, int r ) { if( 整列する要素が一つのみである ) return; 適当な要素 a[v] を枢軸にして、 a[v] より小さい要素を a[l]~a[v-1] に集め、 a[v] より大きい要素を a[v+1]~a[r] に集める quick_sort ( a, l, v-1 ); /* 左の部分を整列する */ quick_sort ( a, v+1, r ); /* 右の部分を整列する */ } 分割のアルゴリズム 0a.一番右の要素を枢軸に選ぶ 0b.ポインタ i を左端に、ポインタ j を枢軸の すぐ左に設定する 1.枢軸より大きな要素が見つかるまで i を右へスキャン 2.枢軸より小さな要素が見つかるまで j を左へスキャン 3. i が指す要素と j が指す要素を交換する 4. i と j がぶつかるまで1~3を繰り返す 5. j の指す要素と枢軸と交換する 55 3 74 20 13 87 46 30 ピボット i j 55 3 74 20 13 87 46 30 i j 13 3 74 20 55 87 46 30 j 13 3 74 20 55 87 46 30 i j 13 3 20 74 55 87 46 30 13 3 20 30 55 87 46 74 i i j j v 前半に<30,後半に>30を置く.それに反するものを入れ替える 左スキャンと右スキャンが交錯したらピボットをそこに置く→@ピボットの左にピボットより小さい値,右に大きい値があるはず 再帰版クイックソート /* 配列a[l]~a[r]を分割する。枢軸の添え字を返す */ int partition( int a[ ], int l, int r ) { int i, j, pivot, t; i = l – 1; j = r; /* ポインタ i と j を初期化する */ pivot = a[r]; /* いちばん右端の要素を枢軸にする */ for( ; ; ) { /* ポインタ i と j とがぶつかるまで繰り返す */ while( a[++i] pivot ) ; /* ポインタ i を右へ進める */ while( i j pivot a[j] ) ; /* ポインタ i を左へ進める */ if ( i = j ) break; /* ポインタ i と j がぶつかったらループを抜ける */ t = a[i]: a[i] = a[j]; a[j] = t; /* i の指す要素と j の指す要素を交換する */
您可能关注的文档
- 典型题专练8.doc
- 典型相關摘要.doc
- 典型住宿條款.doc
- 點矩陣的介紹.ppt
- 电费是供电企业经济效益的最终体现,是建设一强三优.doc
- 电气技术应用专业培训方案.doc
- 電磁界アニメーション.ppt
- 電工實訓分組作業.ppt
- 電流擁擠效應(currentcrowdingeffect).ppt
- 電気電子工学序論第3回(情報)-eie.yz.yamagata.ppt
- 2025-2026学年天津市和平区高三(上)期末数学试卷(含解析).pdf
- 2025-2026学年云南省楚雄州高三(上)期末数学试卷(含答案).pdf
- 2025-2026学年甘肃省天水市张家川实验中学高三(上)期末数学试卷(含答案).docx
- 2025-2026学年福建省厦门市松柏中学高二(上)期末数学试卷(含答案).docx
- 2025-2026学年广西钦州市高一(上)期末物理试卷(含答案).docx
- 2025-2026学年河北省邯郸市临漳县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省石家庄二十三中七年级(上)期末历史试卷(含答案).docx
- 2025-2026学年海南省五指山市九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省唐山市玉田县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省邢台市市区九年级(上)期末化学试卷(含答案).docx
最近下载
- 罗伯特·S.平狄克-微观经济学(第九版)PindyckPPT_Ch.6.pptx VIP
- 罗伯特·S.平狄克-微观经济学(第九版)PindyckPPT_Ch.5.pptx VIP
- DB14T 1098-2024奶牛规模养殖技术规程.pdf VIP
- 《卫生微生物学检验》课件——04-化妆品中铜绿假单胞菌的检测.pptx VIP
- 2025年春顶尖课课练八年级物理下册沪科版答案.pdf VIP
- 罗伯特·S.平狄克-微观经济学(第九版)PindyckPPT_Ch.4.pptx VIP
- 青岛酒店管理职业技术学院单招《数学》模拟试题附答案详解【预热题】.docx VIP
- 古诗江上渔者.pptx VIP
- 罗伯特·S.平狄克-微观经济学(第九版)PindyckPPT_Ch.3.pptx VIP
- (2026春新版)人教版三年级数学下册全册教案.pdf
原创力文档

文档评论(0)