2012-12-30 16 views
5

मैं एक 2 आयामी array.the मूल सरणी सॉर्ट करने के लिए कोशिश कर रहा हूँ में एक 2 आयामी सरणी छंटाई

5 0 3 
4 1 2 
3 1 1 
4 2 2 
3 3 1 

जब हल कर, ऐसा

3 1 1 
3 3 1 
4 2 2 
4 1 2 
5 0 3 

यहाँ होना चाहिए कोड है मैं बबल सॉर्ट को लागू करने का प्रयास करते हुए, मैं पंक्तियों की संख्या का प्रतिनिधित्व करता हूं।

int x,y,z,j,temp1,temp2,temp3; 
for(x=0;x<i;x++) 
{ 
    for (j=0;j<i-1;j++) 
    { 
     if(a[j][0]>a[j+1][0]) 
     { 
      temp1=a[j][0]; 
      temp2=a[j][1]; 
      temp3=a[j][2]; 
      a[j][0]=a[j+1][0]; 
      a[j][1]=a[j+1][1]; 
      a[j][2]=a[j+1][2]; 
      a[j+1][0]=temp1; 
      a[j+1][1]=temp2; 
      a[j+1][2]=temp3; 
     } 
    } 
} 

यह अभी भी सॉर्ट नहीं करता है, किसी भी मदद की सराहना की जाएगी।

+13

आपका ब्रेकेट उत्सुक है। – moonwave99

+8

'4 2 2'' 4 1 2' से पहले क्यों आता है? – pmg

+1

एक अच्छा संकेत यह है कि आप अपने लूप के बाहर चर 'x' का उपयोग नहीं करते हैं। – Hogan

उत्तर

3

ऐसा लगता है कि आप lexicographical order में सरणी की पंक्तियों को सॉर्ट करने का प्रयास कर रहे हैं। यदि आप 2 डी सरणी को सरणी के सरणी के रूप में देखते हैं, तो आप पहले-स्तर सरणी के भीतर दूसरे स्तर के सरणी को आरोही लेक्सिकोोग्राफ़िकल क्रम में क्रमबद्ध कर रहे हैं।

इस पर निर्भर करता है कि आपकी सरणी में कॉलम की संख्या तय की गई है, तो आप एक कस्टम तुलनित्र के साथ qsort फ़ंक्शन का उपयोग करके ऐसा करने में सक्षम हो सकते हैं। उदाहरण के लिए, यदि आप जानते हैं कि वहाँ हमेशा प्रत्येक स्तंभ में वास्तव में 3 तत्वों हो जाएगा, तो आप एक तुलनित्र इस तरह लिख सकते हैं:

static const size_t NUM_COLS = 3; 

/* Lexicographically compare two arrays of size NUM_COLS. */ 
int CompareArrays(const void* arr1, const void* arr2) { 
    /* Convert back to the proper type. */ 
    const int* one = (const int*) arr1; 
    const int* two = (const int*) arr2; 

    /* Do an element-by-element comparison. If a mismatch is found, report how 
     * the arrays compare against one another. 
     */ 
    for (size_t i = 0; i < NUM_COLS; i++) { 
     if (one[i] < two[i]) return -1; 
     if (one[i] > two[i]) return +1; 
    } 

    /* If we get here, the arrays are equal to one another. */ 
    return 0; 
} 

/* Use qsort to sort the arrays */ 
qsort((const int*)&one, numRows, sizeof(int[NUM_COLS]), CompareArrays); 

आशा इस मदद करता है! ग में

-1

तरह 2 डी सरणी

int x[5][5],i,j,i1,j1,temp,k; 

for (int i=0;i<5;i++) 
for (int j=0:<5;j++) 
cin>>x[i][j]; 


for (int i=0;i<5;i++) 
    for (int j=0:<5;j++) 
{ 
    k=j+1; 
      for (int i1=0;i<5;i1++) 
      { 
       for (int j1=k:<5;j1++) 
        { 
        if (x[i,j]>x[i1,j1]) 
         { 
         temp=x[i,j]; 
         x[i,j]=x[i1,j1]; 
         x[i1,j1]=temp; 
         } 
        } 
       k=1; 
      } 
} 


for (int i=0;i<5;i++) 
for (int j=0:<5;j++) 
cout<<x[i][j];