c-在不使用qsort的情况下对2x3矩阵进行排序



我的老师布置了一些我似乎不知道如果不使用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("%it", a[i][j]);
    }
    printf("n");
}
return;
}

我感谢所有的帮助!

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

下面是气泡排序算法的一个例子

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
#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("%it", 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]);
    }
}

相关内容

  • 没有找到相关文章

最新更新