不使用qsort对2x3矩阵排序

时间:2014-04-21 20:15:48

标签: c sorting multidimensional-array

我的老师已经指定了一些我似乎无法在不使用qsort的情况下弄清楚如何做的事情。我们给了一个2x3阵列,他希望我们从最小到最大排序每一行。我不得将qsort用于学习目的;在我看来,这很难。

这是我到目前为止所拥有的;目前,程序崩溃了。我认为这是因为当它到达第三列时,第四列[j+1]中没有任何内容,因此它会返回错误。

#include "stdafx.h"
#include <stdio.h>

int main() {

    int x[2][3] = { { 2, 3, -1 }, { 0, -3, 5 } }; //2x3 matrix; 2 rows, 3 columns
    void sortMinMax(int b[][3], int numRow, int numColumn); //function prototype

    sortMinMax(x, 2, 3);

    return 0;
}

void sortMinMax(int a[][3], int numRow, int numColumn) {

for (int i = 0; i < numRow; i++) {
    for (int j = 0; j < numColumn - 1; j++) {
        if (a[i][j + 1] < a[i][j]) { //swap values if the next number is less than the current number
            int temp = a[i][j];
            a[i][j] = a[i][j + 1];
            a[i][j + 1] = temp;
        }
        printf("%i\t", a[i][j]);
    }
    printf("\n");
}

return;
}

我感谢所有人的帮助!

2 个答案:

答案 0 :(得分:1)

  1. 我相信int i = 0; i <= numRow; i++应为int i = 0; i < numRow; i++
  2. 为什么你有if(i==0)&amp; if(i==1)如果你正在做同样的事情?
  3. 看起来你试图实现类似bubble-sort的算法,但你只对数据进行了一次传递
  4. 以下是冒泡排序算法的示例

    for(int x=0; x<n; x++)
    {
        for(int y=0; y<n-1; y++)
        {
            if(array[y]>array[y+1])
            {
                int temp = array[y+1];
                array[y+1] = array[y];
                array[y] = temp;
            }
        }
    }
    

    @ http://www.sorting-algorithms.com/bubble-sort

    可能会找到更好的替代方案
    for i = 1:n,
        swapped = false
        for j = n:i+1, 
            if a[j] < a[j-1], 
                swap a[j,j-1]
                swapped = true
        → invariant: a[1..i] in final position
        break if not swapped
    end
    

答案 1 :(得分:0)

#include <stdio.h>

int main() {
    int x[2][3] = { { 2, 3, -1 }, { 0, -3, 5 } };
    void sortMinMax(int b[][3], int numRow, int numColumn);

    sortMinMax(x, 2, 3);
    for(int i = 0;i<2;++i){
        for(int j = 0;j<3;++j)
            printf("%i\t", x[i][j]);
        printf("\n");
    }
    return 0;
}

void swap(int *a, int *b){
    int tmp = *a;
    *a = *b;
    *b = tmp;
}

void sort3(int a[3]){
    if(a[0] > a[1])
        swap(&a[0], &a[1]);
    if(a[0] > a[2])
        swap(&a[0], &a[2]);
    if(a[1] > a[2])
        swap(&a[1], &a[2]);
}

void sortMinMax(int a[][3], int numRow, int numColumn) {
    for (int i = 0; i < numRow; i++) {
        sort3(a[i]);
    }
}