1.最も基本的な解決策:もし - のelif - 他
1 しばらく:真 2 = INT A(入力(" 最初のNUM:" )) 3 B = INT(入力(" 第二NUM:" )) 4 C = INT(入力(" 第NUM:" )) 5 もし > B: 6 場合 B> C: 7 プリント(A、B、C) 8 のelif A> C: 9 プリント(C、B) 10 他: 11 プリント(C、B) 12 他: 13 であれば > C: 14 プリント(B、C) 15 ELIFの B> C: 16 プリント(B、C、A) 17 他: 18 プリント(C、B、A) 19 ###### ########################################### 20 D:\無題の\のProject2 \ venv \スクリプト\ python.exe D:/無題/ Project2を/ 1日目/ teryer.py 21第NUM:3 22秒NUM:1 23第NUM:2 24 3 2 1 25第NUM:1 26二NUM:3 27第NUM:2 28 3 2 1
最小値と最大値の2方法のリスト:
1 NUMSは= [] 2つの #は、空のリストを定義する 3。 ための I に範囲(1,4 ): 4 #サイクルの3倍の数。 5。 nums.append(INT(INPUT(' 番号{入力してください} ' .format (I)))) 6。 #個別デジタルNUMSを追加空リストに 7。 ながらTRUE: 8 MAX_NUM = MAX(NUMS) 。9 #NUMS内の最大のリストから選択された 10 プリント(MAX_NUM、エンド= ' ' ) 。11 #は、出力します最大値は 12である nums.remove(MAX_NUM) 13である #最大取り外し 14 位最後の残りの要素まで、残差値の最大値を選択するため、および最大値を削除し続け 15 IF ==(NUMS)をlenを1 : 16 プリント(NUMS [0]、エンド= ' ' ) 。17 BREAK 18は、 #リストの長さが1である場合場合アウト真whileループ、すなわち要素のリストがあり、 19 ######################## ########################## 20 D:スクリプト\ \無題の\のProject2 \ Venv \ python.exe D:/無題/のProject2 / DAY1 / teryer.py 21は、 32:数字を入力してください 22は、 5:第2番号を入力 される23入力してください番号:. 11の 24 32 5 11 25 コード0終了で仕上げプロセス 26である # この方法は、順序付けられた複数桁の数字を行ってもよいです
3.リストがソートされたソート()メソッドです。
1 #GBK =コーディング 2 NUMS = [] 3 #空のリストを作成し 4。 ための I に範囲(1,4 ): 5 #3サイクルについて 6。 nums.append(INT(INPUT(' {数字を入力してください} :' .format(I)))) 。7 nums.sort(リバース= TRUE) 。8 #ソートリスト()メソッド、デフォルトで昇順、降順にtrue =逆 9。 プリント(NUMS) 10 位##### ########################################## 11 D:\無題の\ Project2を\ Venv \スクリプト\ python.exe D:/無題/のProject2 / DAY1 / teryer.py 12は、 21:最初の数入力 13は第2の番号を入力:33 14数字:. 1入力してください 15 [33と、21 ,. 1である] 16 17の。終了コード0で仕上げプロセス
18は#方法は、マルチすることができます数字列
4.バブル法
- ソート交換が属しています
- ペアごとの比較サイズ、スワップ場所。水ぶくれのように取ることをゴクゴク
- 結果は昇順と降順に分かれています
- 昇順:数nは左から右へ、0からN-1までの番号、インデックス値0と1を比較すると、0のインデックスが大きく、全く交換されない場合、インデックスは、位置の両方の交換大きい場合。比較のインデックス値1と2、右に大きな価値を継続します。N-2及びN-1の比較が終了するまで、比較の最初のラウンドを完了しました。右端の位置が既に最大値であるため、N-2、N-1のインデックス0から第二ラウンドを比較します。ように、各ラウンドは、比較するために、最後の二つの数字を残してまで、比較に関与していない右端を削減します。
- 降順:昇順と反対
1 NUMSは= [1,9,8,5,6,7,4,3,2 ] 2 #リストを作成する 。3長さ= LEN(NUMS)を 4 #は、リストの長さを計算する 。5 count_swap = 0 。6 #の交換の数 7 = COUNT 0 。8回の #反復 9。 ための I における範囲(長さ): 10の #いくつかの比較サイクルにいくつかの要素 11 のための J でレンジ(I -長1 ): 12である 。#サイクル当たりに一度最大値を固定し終え残りのサブロビン長-Iの数に右側の数、 13 #-1境界問題、下境界があるため、1 + J 14 = 1 + COUNT 15を IF NUMS [J]> NUMS [Jの+ 1 ]: 16 TMP = NUMS [J] 17 [Jの+ 1 [j]がNUMSを= NUMS ] 18である NUMS = [J + 1] TMPを 19 #のバブリング最高の価値交換の核となるアイデア 20 count_swap + 1 = 21 プリント(NUMS、count_swap、COUNT) 22 ############################ ###################### 23 D:無題の\のProject2 \ \ Venv \スクリプト\ python.exeのD:/無題/のProject2 / DAY1 / teryer.py 24 [1、2 ,. 3 ,. 4 ,. 5 ,. 6 ,. 7 ,. 8 ,. 9 25 36 25 26は、コード0のプロセス仕上げ出口
NUMSが[1,2,3,4,5,6,7,8,9]そのようなリストは、15〜18行が完全に行われない場合、与えられた想像count_swapの即ち全くスイッチング周波数値なしそれが0であるが、一度以下、さらに必要とすることなく、反復回数とカウントNUMSリストは、2及び3は、比較例1及び2、2の最大値をとり、3 3及び4は、比較の最大値をとる...... =カウント36、それを作るの比較回数を削減する方法はありませんか?私たちは= 8を数え、このようなコードを以下のように、ラベルフラグを作ることができ、効率は多くのことを改善しました。
1 #GBK =コーディング 2 NUMS = [1,2,3,4,5,6,7,8,9 ] 。3長さ= LEN(NUMS)を 4 count_swap = 0 。5 COUNT = 0 。6フラグ=において偽 7 #が提供タグフラグ、初期値Flase 8。 ための I における範囲(長さ): 9 フラグ= Falseを 10 #iは、フラグ値に再構成され、各サイクル、NUMSの= [1,2,3,4,9,6,7、 8,5]はっきり見たとき 11。 ための J でレンジ(I -長さ1 ): 12で カウント+ 1 = 13であり、 IFNUMS [J]> NUMS [J + 1は。]: 14 tmpが= NUMS [J] 15 [J + 1 NUMS [J]がNUMSを= ] 16 [J + 1] NUMSを= TMP 17。 フラグに= Trueの 18である #はここ手段交換のすべての要素は、フラグの値がTrueになった場合、である 19。 count_swap + 1 = 20である IF ないフラグ: 21である BREAK 22は #2行はforループJのうち、次に、交換素子内にない場合に平均 23れる プリントが( NUMS、count_swap、COUNT) 24 ########################################### ### 25D:\タイトルなしの\ Project2を\ venv \スクリプト\ python.exe D:/無題/ Project2を/ 1日目/ teryer.py 26 [1、2、3、4、5、6、7、8、9] 0 8 27 28プロセス終了コードで終了
バブル法の概要:
- バブル法は、比較データのラウンドを必要とし
- スイッチング仕分けの次のラウンドを継続するために発生した場合の交換は、終了することができ、ソート、発生していない場合、フラグはデータ交換を丸めるように設定することができるかどうかを決定することは、行われます
- 最悪の場合、最初の標的配列と逆のシーケンス番号完全にカバー1、...、N-1との和N(N-1)をソート/ 2
- 最良の状況はソートされ、元の配列と同一の標的配列を、N-1である回数を横切ります
- O(2のn乗)の時間計算量