2017-05-18 15 views
0

正の整数のソートアルゴリズムを理解していますが、負の整数を扱うためにソートする方法を教えてください。負の整数でソートをソートする

+1

アルゴリズムを変更する必要はありません。カウントの配列に十分な範囲を指定するだけで済みます。 –

+3

[Counting Sort on GeeksForGeeks](http://www.geeksforgeeks.org/counting-sort/)のページを参照すると、カウント配列の0番目のインデックスを最小値/下限に単純に合わせると、うまく動作します。 –

+0

@PaulRどのようにこの範囲を指定できますか? – fareed

答えて

0

私はここに何かをコーディングしました。これは、カウントソートと呼ばれることがあります。私はここでハッシュマップを利用しています。ここで

1. Declare a map - map<int, int> m; // it keeps the count of each array element. 
2. Iterate through your array and keep making a count increment. 
3. With this for loop keep track of minimum and maximum element present in the array. 
4. Now start another loop from minimum number to maximum number and based on the count for that element, print it out. 

をそのための作業コードです - ::

は、したがって、この例のために、私は今ここに私のアルゴリズムの流れがある

int a[] = {-3,-1,2,4,-2,-2,5,6}; 

ようになり、私の配列を想定しています -

#include <bits/stdc++.h> 

using namespace std; 

int main() 
{ 
    int a[] = {-3,-1,2,4,-2,-2,5,6}; 
    map<int, int> m; 
    int len = sizeof(a)/sizeof(*a); 
    int min_num = INT_MAX; 
    int max_num = INT_MIN; 
    for(int i=0; i<len; i++) 
    { 
     min_num = min(min_num, a[i]); 
     max_num = max(max_num, a[i]); 
     m[a[i]]++; 
    } 
    for(int i=min_num; i<=max_num; i++) 
    { 
     int count = m[i]; 
     if(count>0) 
     { 
     for(int j=0; j<count; j++) 
     { 
      cout<<i<<" "; 
     } 
     } 
    } 
    cout<<endl; 
    return 0; 
} 

希望します。

関連する問題