我的老师布置了一些我似乎不知道如果不使用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;
}
我感谢所有的帮助!
- 我认为
int i = 0; i <= numRow; i++
应该是int i = 0; i < numRow; i++
- 为什么你有
if(i==0)
&if(i==1)
如果你在做同样的事情 - 看起来你试图实现类似冒泡排序的算法,但你只对数据进行了一次传递
下面是气泡排序算法的一个例子
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]);
}
}