質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

3回答

193閲覧

リストに格納しないでソートするにはどの様な解決策があるでしょうか?

inazuma.harada

総合スコア9

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/06/26 13:49

import random
for i in range(10):
x = random.randint(500, 1000)
print('{0:4d}'.format(x))
というプログラムを修正して、プログラム上で実行結果を降順にソートしたいのです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LouiS0616

2018/06/26 13:51

なぜ『リストに格納しないで』という条件が付くのでしょうか。
hayataka2049

2018/06/26 13:52

どうしてもリストは使っちゃダメですか? 「dictやsetにいれませう。あ、arrayもあるね」ってとんちはあり? なし? 単にxをlistに入れる方法がわからないのであれば、その方向でアドバイスすることもできますが
guest

回答3

0

python

1from random import randint 2print(*map('{0:4d}'.format, sorted(randint(500, 1000) for _ in range(10))), sep='\n')

投稿2018/06/26 15:04

YouheiSakurai

総合スコア6142

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

ス リ ー プ ソ ー ト

python

1import random 2import threading 3import time 4 5def f(ms): 6 time.sleep(1-ms*(10**-3)) # 修正。1000以上は入ってこないと仮定 7 print('{0:4d}'.format(ms)) 8 9 10for i in range(10): 11 x = random.randint(500, 1000) 12 threading.Thread(target=f, args=(x,)).start() 13 14""" => 15 982 16 962 17 935 18 928 19 796 20 650 21 639 22 510 23 503 24 501 25"""

参考:
画期的(?)なソートアルゴリズム「Sleep Sort」:濃縮還元オレンジニュース|gihyo.jp … 技術評論社


質問の追記・修正依頼欄で進展があったらもう少し真面目な回答を書こうと思います。

投稿2018/06/26 14:05

編集2018/06/26 14:11
hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayataka2049

2018/06/26 14:09

なんでBAにしたのか知らんですが、とりあえず見直したら降順ですらないからそれは直しますよ
inazuma.harada

2018/06/26 14:10

とても分かりやすかったです。ありがとうございました。 またほかにも回答してくださった方々、ありがとうございました。
hayataka2049

2018/06/26 14:11

こんなんでええんですか・・・
hayataka2049

2018/06/26 14:13

for文が1回回るのに1ms以上かかっちゃうと(普通の状況ならかからないと思うけど)正しく動く保証はないので、気をつけて
hayataka2049

2018/06/26 14:21

あと、実用的なパフォーマンスはありませんので、そういう用途には使わないでください もし「リストを使わないでソートする方法を競い合おう!」的な会合とか課題的なものに提出されるのでしたら、高確率でネタ被りすると思うので、他の方法を考えたほうが聡明です(とにかく何でも良いから出せば良いんだ、って状況なら止めないけど。私的にはあまり後味がよくない。あと、もしそういう状況なら、このページを他の人に見られるリスクも考えてくださいね)
inazuma.harada

2018/06/26 14:26

いえ、大丈夫です。学校の練習問題を深く知りたく質問しました。 長文の解答本当にありがとうございます。
guest

0

前回以上の値が出たら出力するようにしたらどうでしょう。
結果における乱数の質は期待できないと思いますが。

Python

1import random 2prev = 1000 3#prev = 500 # 昇順 4for i in range(10): 5 while True: 6 x = random.randint(500, 1000) 7 if x <= prev or x == 500: 8 #if x >= prev or x == 1000: # 昇順 9 print('{0:4d}'.format(x)) 10 prev = x 11 break

投稿2018/06/26 13:57

編集2018/06/26 14:05
can110

総合スコア38256

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問