2017-01-19 4 views
0

私は並べ替えを依頼されましたk messed array 私は以下のコードがあります。私はcomplexitynlogn to nlogkから減らす必要があります。どのように特定のリストのインデックスをPythonでソートするために適用する

arr = [3,2,1,4,5,6,8,10,9] 
k = 2 
def sortKmessedarr(arr, k): 
    i = 1 
    j = 0 
    n = len(arr) 
    while i < n: 
     if arr[i] > arr[i-1]: 
      pass 
     else: 
      arr[i-1:i+k].sort() # How to sort elements between two specific indexs 
     i += 1 
sortKmessedarr(arr, k) 
print(arr) 

私はこのアプローチを適用した場合、それはnlogk

になるだろうと思いますしかし、どのようにこのsort()

indexes. 2の間を適用する私はまた、以下のような別のアプローチを試してみました:

arr = [3,2,1,4,5,6,8,10,9] 
k = 2 
def sortKmessedarr(arr, k): 
    def merge(arr): 
     arr.sort() 
     print(arr) 
    i = 1 
    j = 0 
    n = len(arr) 
    while i < n: 
     if arr[i] > arr[i-1]: 
      pass 
     else: 
      merge(arr[i-1:i+k])#.sort() 
     i += 1 
sortKmessedarr(arr, k) 
print(arr) 

まだ運がない

+0

あなたのコードが動作する場合がありますが、人々がより良い選択肢を提案したいです、あなたの質問はおそらく[コードレビュー](http://codereview.stackexchange.com/)の方が適しています。 – TemporalWolf

答えて

1

あなたは構文的に意図した効果を得るために、スライスの割り当てとsortedを使用することができますが、私は、性能(メモリまたは速度)への影響が不明だ:

arr[i-1:i+k] = sorted(a[i-1:i+k]) 
+0

それはうまくいき、なぜ '.sort() 'で動作しないのですか –

+0

@RasmiRanjanNayak' arr [i - 1:i + k] 'は新しいリスト*を返します。これはインプレースでソートされます。あなたは新しいリストを捕まえることはないので、ガベージコレクションを取得します。基本的に、そのコード行は役に立たない。 –

関連する問題