mirror of
https://github.com/kangjianwei/Data-Structure.git
synced 2026-08-18 01:10:14 +08:00
🐛 修正习题1.16比较大小的逻辑
This commit is contained in:
@@ -7,9 +7,9 @@ int main(int argc, char *argv[])
|
||||
{
|
||||
int i, j, k;
|
||||
|
||||
i = 3;
|
||||
j = 7;
|
||||
k = 1;
|
||||
i = 1;
|
||||
j = 2;
|
||||
k = 3;
|
||||
|
||||
printf("作为示范,设定依次读入的三个整数为:%d %d %d...\n", i, j, k);
|
||||
printf("这三个数从大到小的顺序为:");
|
||||
@@ -27,6 +27,7 @@ void Algo_1_16(int i, int j, int k)
|
||||
{
|
||||
int tmp;
|
||||
|
||||
// 1.确保i>=j
|
||||
if(i<j)
|
||||
{
|
||||
tmp = i;
|
||||
@@ -34,6 +35,7 @@ void Algo_1_16(int i, int j, int k)
|
||||
j = tmp;
|
||||
}
|
||||
|
||||
// 2.确保j>=k,这里如果j是小于k的,那么会对j和k的值进行交换
|
||||
if(j<k)
|
||||
{
|
||||
tmp = j;
|
||||
@@ -41,6 +43,8 @@ void Algo_1_16(int i, int j, int k)
|
||||
k = tmp;
|
||||
}
|
||||
|
||||
// 3.如果第2步中发现j<k,则会对j和k的值进行交换,这会导致j的值被更新。
|
||||
// 如果j的值发生了更新,这可能会破坏第1步中i>=j的保证,所以此处需要再次验证i与j的关系。
|
||||
if(i<j)
|
||||
{
|
||||
tmp = i;
|
||||
|
||||
@@ -1,24 +1,32 @@
|
||||
#include <stdio.h>
|
||||
|
||||
/*
|
||||
* 题1.16
|
||||
* 题1.16(直接比较)
|
||||
*
|
||||
* 将3个整数按从大到小顺序输出
|
||||
* 将3个整数从大到小排序,约定排序结果为x>y>z
|
||||
*/
|
||||
void Algo_1_16(int *x, int *y, int *z);
|
||||
void Algo_1_16_1(int* x, int* y, int* z);
|
||||
|
||||
/*
|
||||
* 题1.16(冒泡排序)
|
||||
*
|
||||
* 将3个整数从大到小排序,约定排序结果为x>y>z
|
||||
*/
|
||||
void Algo_1_16_2(int* x, int* y, int* z);
|
||||
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
int x, y, z;
|
||||
|
||||
x = 3;
|
||||
y = 7;
|
||||
z = 1;
|
||||
x = 1;
|
||||
y = 2;
|
||||
z = 3;
|
||||
|
||||
printf("作为示范,设定输入为:%d %d %d...\n", x, y, z);
|
||||
|
||||
// 进行排序
|
||||
Algo_1_16(&x, &y, &z);
|
||||
Algo_1_16_1(&x, &y, &z);
|
||||
// Algo_1_16_2(&x, &y, &z);
|
||||
|
||||
printf("将其从大到小排序后为:%d %d %d...\n", x, y, z);
|
||||
|
||||
@@ -26,28 +34,56 @@ int main(int argc, char* argv[]) {
|
||||
}
|
||||
|
||||
|
||||
// 将3个整数按从大到小顺序输出
|
||||
void Algo_1_16(int *x, int *y, int *z) {
|
||||
// 将3个整数从大到小排序,约定排序结果为x>y>z(直接比较)
|
||||
void Algo_1_16_1(int* x, int* y, int* z) {
|
||||
int tmp;
|
||||
|
||||
// 确保x>=y
|
||||
// 1.确保x>=y
|
||||
if(*x < *y) {
|
||||
tmp = *x;
|
||||
*x = *y;
|
||||
*y = tmp;
|
||||
}
|
||||
|
||||
// 确保z>=y
|
||||
// 2.确保z>=y,这里如果y是小于z的,那么会对y和z的值进行交换
|
||||
if(*y < *z) {
|
||||
tmp = *y;
|
||||
*y = *z;
|
||||
*z = tmp;
|
||||
}
|
||||
|
||||
// 确保x>=z
|
||||
if(*x < *z) {
|
||||
// 3.如果第2步中发现y<z,则会对y和z的值进行交换,这会导致y的值被更新。
|
||||
// 如果y的值发生了更新,这可能会破坏第1步中x>=y的保证,所以此处需要再次验证x与y的关系。
|
||||
if(*x < *y) {
|
||||
tmp = *x;
|
||||
*x = *z;
|
||||
*z = tmp;
|
||||
*x = *y;
|
||||
*y = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
// 将3个整数从大到小排序,约定排序结果为x>y>z(冒泡排序)
|
||||
void Algo_1_16_2(int* x, int* y, int* z) {
|
||||
int tmp;
|
||||
int i, j;
|
||||
int a[3];
|
||||
|
||||
a[0] = *x;
|
||||
a[1] = *y;
|
||||
a[2] = *z;
|
||||
|
||||
// 需要进行2轮比较
|
||||
for(i = 1; i <= 2; i++) {
|
||||
for(j = 0; j < 3 - i; j++) {
|
||||
// 把小的往后挪
|
||||
if(a[j] < a[j + 1]) {
|
||||
tmp = a[j];
|
||||
a[j] = a[j + 1];
|
||||
a[j + 1] = tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*x = a[0];
|
||||
*y = a[1];
|
||||
*z = a[2];
|
||||
}
|
||||
|
||||
@@ -1,53 +1,90 @@
|
||||
#include <stdio.h>
|
||||
|
||||
/*
|
||||
* 题1.16
|
||||
* 题1.16(直接比较)
|
||||
*
|
||||
* 将3个整数按从大到小顺序输出
|
||||
* 将3个整数从大到小排序,约定排序结果为x>y>z
|
||||
*/
|
||||
void Algo_1_16(int *x, int *y, int *z);
|
||||
void Algo_1_16_1(int* x, int* y, int* z);
|
||||
|
||||
/*
|
||||
* 题1.16(冒泡排序)
|
||||
*
|
||||
* 将3个整数从大到小排序,约定排序结果为x>y>z
|
||||
*/
|
||||
void Algo_1_16_2(int* x, int* y, int* z);
|
||||
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
int x, y, z;
|
||||
|
||||
x = 3;
|
||||
y = 7;
|
||||
z = 1;
|
||||
|
||||
|
||||
x = 1;
|
||||
y = 2;
|
||||
z = 3;
|
||||
|
||||
printf("作为示范,设定输入为:%d %d %d...\n", x, y, z);
|
||||
|
||||
|
||||
// 进行排序
|
||||
Algo_1_16(&x, &y, &z);
|
||||
|
||||
Algo_1_16_1(&x, &y, &z);
|
||||
// Algo_1_16_2(&x, &y, &z);
|
||||
|
||||
printf("将其从大到小排序后为:%d %d %d...\n", x, y, z);
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// 将3个整数按从大到小顺序输出
|
||||
void Algo_1_16(int *x, int *y, int *z) {
|
||||
// 将3个整数从大到小排序,约定排序结果为x>y>z(直接比较)
|
||||
void Algo_1_16_1(int* x, int* y, int* z) {
|
||||
int tmp;
|
||||
|
||||
// 确保x>=y
|
||||
|
||||
// 1.确保x>=y
|
||||
if(*x < *y) {
|
||||
tmp = *x;
|
||||
*x = *y;
|
||||
*y = tmp;
|
||||
}
|
||||
|
||||
// 确保z>=y
|
||||
|
||||
// 2.确保z>=y,这里如果y是小于z的,那么会对y和z的值进行交换
|
||||
if(*y < *z) {
|
||||
tmp = *y;
|
||||
*y = *z;
|
||||
*z = tmp;
|
||||
}
|
||||
|
||||
// 确保x>=z
|
||||
if(*x < *z) {
|
||||
|
||||
// 3.如果第2步中发现y<z,则会对y和z的值进行交换,这会导致y的值被更新。
|
||||
// 如果y的值发生了更新,这可能会破坏第1步中x>=y的保证,所以此处需要再次验证x与y的关系。
|
||||
if(*x < *y) {
|
||||
tmp = *x;
|
||||
*x = *z;
|
||||
*z = tmp;
|
||||
*x = *y;
|
||||
*y = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
// 将3个整数从大到小排序,约定排序结果为x>y>z(冒泡排序)
|
||||
void Algo_1_16_2(int* x, int* y, int* z) {
|
||||
int tmp;
|
||||
int i, j;
|
||||
int a[3];
|
||||
|
||||
a[0] = *x;
|
||||
a[1] = *y;
|
||||
a[2] = *z;
|
||||
|
||||
// 需要进行2轮比较
|
||||
for(i = 1; i <= 2; i++) {
|
||||
for(j = 0; j < 3 - i; j++) {
|
||||
// 把小的往后挪
|
||||
if(a[j] < a[j + 1]) {
|
||||
tmp = a[j];
|
||||
a[j] = a[j + 1];
|
||||
a[j + 1] = tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*x = a[0];
|
||||
*y = a[1];
|
||||
*z = a[2];
|
||||
}
|
||||
|
||||
|
||||
@@ -1,24 +1,32 @@
|
||||
#include <stdio.h>
|
||||
|
||||
/*
|
||||
* 题1.16
|
||||
* 题1.16(直接比较)
|
||||
*
|
||||
* 将3个整数按从大到小顺序输出
|
||||
* 将3个整数从大到小排序,约定排序结果为x>y>z
|
||||
*/
|
||||
void Algo_1_16(int *x, int *y, int *z);
|
||||
void Algo_1_16_1(int* x, int* y, int* z);
|
||||
|
||||
/*
|
||||
* 题1.16(冒泡排序)
|
||||
*
|
||||
* 将3个整数从大到小排序,约定排序结果为x>y>z
|
||||
*/
|
||||
void Algo_1_16_2(int* x, int* y, int* z);
|
||||
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
int x, y, z;
|
||||
|
||||
x = 3;
|
||||
y = 7;
|
||||
z = 1;
|
||||
x = 1;
|
||||
y = 2;
|
||||
z = 3;
|
||||
|
||||
printf("作为示范,设定输入为:%d %d %d...\n", x, y, z);
|
||||
|
||||
// 进行排序
|
||||
Algo_1_16(&x, &y, &z);
|
||||
Algo_1_16_1(&x, &y, &z);
|
||||
// Algo_1_16_2(&x, &y, &z);
|
||||
|
||||
printf("将其从大到小排序后为:%d %d %d...\n", x, y, z);
|
||||
|
||||
@@ -26,28 +34,56 @@ int main(int argc, char* argv[]) {
|
||||
}
|
||||
|
||||
|
||||
// 将3个整数按从大到小顺序输出
|
||||
void Algo_1_16(int *x, int *y, int *z) {
|
||||
// 将3个整数从大到小排序,约定排序结果为x>y>z(直接比较)
|
||||
void Algo_1_16_1(int* x, int* y, int* z) {
|
||||
int tmp;
|
||||
|
||||
// 确保x>=y
|
||||
// 1.确保x>=y
|
||||
if(*x < *y) {
|
||||
tmp = *x;
|
||||
*x = *y;
|
||||
*y = tmp;
|
||||
}
|
||||
|
||||
// 确保z>=y
|
||||
// 2.确保z>=y,这里如果y是小于z的,那么会对y和z的值进行交换
|
||||
if(*y < *z) {
|
||||
tmp = *y;
|
||||
*y = *z;
|
||||
*z = tmp;
|
||||
}
|
||||
|
||||
// 确保x>=z
|
||||
if(*x < *z) {
|
||||
// 3.如果第2步中发现y<z,则会对y和z的值进行交换,这会导致y的值被更新。
|
||||
// 如果y的值发生了更新,这可能会破坏第1步中x>=y的保证,所以此处需要再次验证x与y的关系。
|
||||
if(*x < *y) {
|
||||
tmp = *x;
|
||||
*x = *z;
|
||||
*z = tmp;
|
||||
*x = *y;
|
||||
*y = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
// 将3个整数从大到小排序,约定排序结果为x>y>z(冒泡排序)
|
||||
void Algo_1_16_2(int* x, int* y, int* z) {
|
||||
int tmp;
|
||||
int i, j;
|
||||
int a[3];
|
||||
|
||||
a[0] = *x;
|
||||
a[1] = *y;
|
||||
a[2] = *z;
|
||||
|
||||
// 需要进行2轮比较
|
||||
for(i = 1; i <= 2; i++) {
|
||||
for(j = 0; j < 3 - i; j++) {
|
||||
// 把小的往后挪
|
||||
if(a[j] < a[j + 1]) {
|
||||
tmp = a[j];
|
||||
a[j] = a[j + 1];
|
||||
a[j + 1] = tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*x = a[0];
|
||||
*y = a[1];
|
||||
*z = a[2];
|
||||
}
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user