试设计算法:输入一个有m行n列的整数矩阵,然后将每一行的元素按非减次序输出。用C或C++实现该算法,并分析自己所写算法的时间复杂度。例如:4,3,5,6,29,8,1,2,87,1,2,3,8 则输出如下结果: 2,3,4,5,61,2,8,8,91,2,3,7,8
时间: 2024-05-23 20:15:21 浏览: 78
很高兴为您服务。针对您的问题,我可以回答。以下是算法设计和C/C++代码实现。
算法设计:
1. 读入一个m行n列的整数矩阵A
2. 对于A的每一行r(1<=r<=m),根据元素非减的次序排序
3. 将排序后的A输出
时间复杂度分析:
我们知道,对于 n 个元素的排序问题,最好的时间复杂度为 O(n),最差的时间复杂度为 O(n^2)。对于本算法中的每一行排序问题,由于行的长度为n,因此时间复杂度的最坏情况是 O(n^2),最好情况是 O(n)。所以,整个算法的时间复杂度为 O(mn^2)。
C/C++代码实现:
#include<stdio.h>
#include<stdlib.h>
void insertion_sort(int *A, int n)
{
int i, j, key;
for (j = 1; j < n; j++)
{
key = A[j];
i = j - 1;
while (i >= 0 && A[i] > key)
{
A[i + 1] = A[i];
i = i - 1;
}
A[i + 1] = key;
}
}
void sort_rows(int **A, int m, int n)
{
int i, j;
for (i = 0; i < m; i++)
{
insertion_sort(A[i], n);
}
}
void print_matrix(int **A, int m, int n)
{
int i, j;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
printf("%d ", A[i][j]);
}
printf("\n");
}
}
int main()
{
int m = 3, n = 4, i, j;
int **A;
/* allocate memory for 2D array A */
A = (int **)malloc(m * sizeof(int *));
for (i = 0; i < m; i++)
A[i] = (int *)malloc(n * sizeof(int));
/* initialize A */
A[0][0] = 4, A[0][1] = 3, A[0][2] = 5, A[0][3] = 6;
A[1][0] = 29, A[1][1] = 8, A[1][2] = 1, A[1][3] = 2;
A[2][0] = 87, A[2][1] = 1, A[2][2] = 2, A[2][3] = 3;
sort_rows(A, m, n);
print_matrix(A, m, n);
/* free memory allocated for A */
for (i = 0; i < m; i++)
free(A[i]);
free(A);
return 0;
}
以上代码实现了本算法,您可以在此基础上编写您的程序。
阅读全文