输入一个3×3的二维整数矩阵,分别采用冒泡法、交换法编程实现对这9个数字从小到大进行排序,并输出。
例如,输入为: ,则输出为: 。
【其中选择法排序的思路提示:设有10个元素a[1]a[10],将a[1]与a[2]a[10]比较,若a[1]比a[2]a[10]都小,则不进行交换,即无任何操作。若a[2]a[10]中有一个以上比a[1]小,则将其中最小的一个(假设为a[i])与a[1]交换,此时a[1]中存放了10个中最小的数。第二轮将a[2]与a[3]a[10]比较,将剩下9个数中的最小值a[i]与a[2]对换,此时a[2]中存放的是10个中第二小的数。以此类推,共进行9轮比较,a[1]a[10]就已按由小到大的顺序存放了。】
参考学习:
#include <stdio.h>
void bubble_sort(int arr[3][3], int len) {
int i, j, temp;
for (i = 0; i < len - 1; i++) {
for (j = 0; j < len - 1 - i; j++) {
if (arr[j][0] > arr[j + 1][0]) {
temp = arr[j][0];
arr[j][0] = arr[j + 1][0];
arr[j + 1][0] = temp;
}
}
}
}
void exchange_sort(int arr[3][3], int len) {
int i, j, temp;
for (i = 0; i < len - 1; i++) {
for (j = i + 1; j < len; j++) {
if (arr[i][0] > arr[j][0]) {
temp = arr[i][0];
arr[i][0] = arr[j][0];
arr[j][0] = temp;
}
}
}
}
int main() {
int matrix[3][3];
int i, j;
// 输入矩阵
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
scanf("%d", &matrix[i][j]);
}
}
// 冒泡排序
bubble_sort(matrix, 9);
// 输出排序结果
printf("冒泡排序结果:\n");
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
// 交换排序
exchange_sort(matrix, 9);
// 输出排序结果
printf("交换排序结果:\n");
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
return 0;
}
以上代码中,定义了两个函数 bubble_sort 和 exchange_sort 分别代表冒泡法排序和交换法排序。在主函数中,首先输入一个3x3的矩阵;然后使用冒泡法和交换法对这9个数字从小到大进行排序,并输出排序结果。
C中的二维数组用一个指针可以当做是一维数组使用
```c
#include <iostream>
using namespace std;
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
swap(arr[j], arr[j + 1]);
}
}
}
}
void selectionSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
swap(arr[i], arr[minIndex]);
}
}
int main() {
int arr[3][3] = {{1, 3, 5}, {2, 4, 6}, {3, 5, 7}};
int n = 3;
bubbleSort(arr, n);
cout << "Sorted array: ";
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
selectionSort(arr, n);
cout << "Sorted array: ";
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
```
不知道你这个问题是否已经解决, 如果还没有解决的话:#include <stdio.h>
void bubble_sort(int arr[][3], int n) //冒泡排序
{
int i, j, temp;
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - 1 - i; j++)
{
if (arr[i][j] > arr[i][j + 1])
{
temp = arr[i][j];
arr[i][j] = arr[i][j + 1];
arr[i][j + 1] = temp;
}
}
}
}
void swap_sort(int arr[][3], int n) //交换排序
{
int i, j, min, temp;
for (i = 0; i < n - 1; i++)
{
min = i; //记录最小值所在的位置
for (j = i + 1; j < n; j++)
{
if (arr[j][0] < arr[min][0])
{
min = j; //更新最小值所在的位置
}
}
if (min != i) //如果位置变化了,说明当前元素不在最前面,需要交换
{
for (j = 0; j < n; j++)
{
temp = arr[i][j];
arr[i][j] = arr[min][j];
arr[min][j] = temp;
}
}
}
}
int main()
{
int arr[3][3] = {{9, 8, 7},
{6, 5, 4},
{3, 2, 1}};
printf("原始矩阵:\n");
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
//冒泡排序
bubble_sort(arr, 3);
printf("冒泡排序后的矩阵:\n");
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
//交换排序
swap_sort(arr, 3);
printf("交换排序后的矩阵:\n");
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}