Сортировка строк матрицы

Дана действительная матрица размером m*n. Упорядочить строки матрицы по неубыванию значений первых элементов строк. Задача № 1 (Сортировка массивов) (см. "Сборник задач для начинающего программиста")

Алгоритм:
1)Создаем матрицу заданого размера и заполняем ее числами
2)Для сортировки первых элементов строк используем метод сортировки обменом ("метод пузырька")
3)Элементы строк сохраняем в дополнительном одномерном массиве
4)Выводим на печать преобразованную матрицу

#include <stdio.h>
#include <stdlib.h>
#define M 5		// кол-во столбцов
#define N 4		// кол-во строк
 
 int main()
{
  int i,j,q;	
 int tmp[N];		// массив для обмена элементов строк
 
  int Mas[M][N]={ {15,2,10,8},{1,5,12,17},{3,8,3,6},{-20,4,7,4},{-1,4,7,6} };
 
     printf("\n\nOur MASSIV:");		
	for(i = 0;i < M;i++)		// цикл  выведения элементов матрицы
 
 
      {
	 printf("\n\n");
 
	 for(j = 0;j < N;j++)		
 
	   {
	     printf("%3d",Mas[i][j]);
	   }
       }
 
 
    for(i = 0;i < M;i++)			
 
    {
 
       for(q = 0;q < M-1;q++)
 
          {
 
       	printf("\n\n");
 
     for(i = 0;i < M-1;i++)			
 
	{
	 if(Mas[i][0] > Mas[i+1][0])	// сортировка первых элементов строк	
 
 
	    for(j = 0;j < N;j++)		// цикл обмена элементами строк
 
	       {
		tmp[j]=Mas[i+1][j];	// элементы строки сохраняем в одномерном массиве tmp
 
		Mas[i+1][j]=Mas[i][j];	 		
 
		Mas[i][j]=tmp[j];
              }
	}
     }
 
 
     printf("SORT MASSIV");
 
    for(i = 0;i < M;i++)			// цикл вывода на печать отсортированной матрицы
 
       {
	 printf("\n\n");
 
	 for(j = 0;j < N;j++)
 
	   {
	     printf("%3d",Mas[i][j]);
	   }
       }
     }
 
 return 0;
 
}

Ключевые слова: 
матрица, сортировка обменом