练习8—指针实现排序

简介: 练习8—指针实现排序

题目

用指针方法编写一个程序,输入3个整数,将它们按由小到大的顺序输出。

解题步骤

(1)定义指针;
(2)接收输入值;
(3)排序;
(4)输出结果;

Java

import java.util.Scanner;

public class E20210813 {
    public static void main(String[] args) {
        int temp;
        int[] array = new int[3];
        Scanner input = new Scanner(System.in);
        System.out.println("please enter three whole numbers:");
        for (int i = 0; i < 3; i++) {
            array[i] = input.nextInt();
        }
        if (array[0] > array[1]) {
            temp = array[0];
            array[0] = array[1];
            array[1] = temp;
        }
        if (array[0] > array[2]) {
            temp = array[0];
            array[0] = array[2];
            array[2] = temp;
        }
        if (array[1] > array[2]) {
            temp = array[1];
            array[1] = array[2];
            array[2] = temp;
        }
        System.out.print("the output from small to large is:");
        for (int j = 0; j < 3; j++) {
            System.out.print(array[j] + " ");
        }
    }
}

说明

  1. 在C/C++中,指针的作用是:通过指针间接访问内存,保留地址,可以理解为指针就是一个地址。同样地,指针就是用于取得地址的,那么这里就有疑问了(Java中没有指针啊?这怎么做?)。
  2. 从表面上看,Java的确没有明确给定 “指针” 这个概念。但是,深入分析,Java中引用类型本质上就是对 "指针" 的封装。使其不能直接操作内存,只能指向对象,这里我们用数组—比较方便大家理解的方式解决。

C语言-1

#include <stdio.h>

void swap(int *p1, int *p2)
{
    int temp = *p1;
    *p1 = *p2;
    *p2 = temp;
}

void exchange(int *q1, int *q2, int *q3) //传递地址,指针接收
{
    if (*q1 > *q2)
        swap(q1, q2);
    if (*q1 > *q3)
        swap(q1, q3);
    if (*q2 > *q3)
        swap(q2, q3);
}

int main()
{
    int a, b, c, *p1, *p2, *p3;
    printf("please enter three integers:");
    scanf("%d%d%d", &a, &b, &c);
    p1 = &a;
    p2 = &b;
    p3 = &c;
    exchange(p1, p2, p3);
    printf("sort from small to large:%d<%d<%d", a, b, c);
    return 0;
}

C语言-2

#include <stdio.h>

void swap(int *p1, int *p2)
{
    int temp = *p1;
    *p1 = *p2;
    *p2 = temp;
}

int main()
{
    int a, b, c;
    int *p1, *p2, *p3; //注意区分
    printf("please enter three integers:");
    scanf("%d%d%d", &a, &b, &c);
    p1 = &a;
    p2 = &b;
    p3 = &c;
    if (a > b)
        swap(p1, p2);
    if (a > c)
        swap(p1, p3);
    if (b > c)
        swap(p2, p3);
    printf("sort from small to large:%d<%d<%d", a, b, c);
    return 0;
}

说明

使用指针时要注意这样几点:
(1)避免使用未初始化的指针,多数情况下程序运行错误都与指针未初始化有关,但是由于这种错误不能被编译器检查发现的特殊性,就需要我们格外注意。最好的解决办法就是使用指针时对它进行定义。当然,早早定义的话也不要忘记初始化,在进行初始化时可以使用 cstdlib中定义的 NULL赋值为0。
(2)因为指针类型给定指针所指向对象的数据类型,所以指针赋值要确保数据类型匹配,才可以对指针进行操作。
(3)不要误以为 int *p , a ;是声明了两个 int型指针,实际是定义了一个 int型指针 p和一个 int型变量 a,为了进行区分我们可以在定义时分开写,详见 C语言-2
相关文章
|
2月前
C进阶:指针的练习(1)
C进阶:指针的练习(1)
|
2月前
|
C语言
C语言指针——练习
C语言指针——练习
|
6天前
|
C++
指针习题练习
指针习题练习
7 0
|
2月前
指针应用基础练习
指针应用基础练习
20 0
|
2月前
|
存储 人工智能
指针的应用练习(数组与指针的关系)
指针的应用练习(数组与指针的关系)
25 0
|
2月前
指针的基础应用(数组的颠倒和排序,二维数组的表示)
指针的基础应用(数组的颠倒和排序,二维数组的表示)
18 0
|
2月前
|
存储 搜索推荐
【C/PTA】指针专项练习(二)
【C/PTA】指针专项练习(二)
78 0
|
2月前
【C/PTA】指针专项练习(一)
【C/PTA】指针专项练习(一)
61 0
|
2月前
|
存储 搜索推荐 Serverless
用指针和动态内存分配的方法输入10,2,30, 4,5,按输入顺序逆置排序,输出排序后的元素,即输出5,4,30,2,10
用指针和动态内存分配的方法输入10,2,30, 4,5,按输入顺序逆置排序,输出排序后的元素,即输出5,4,30,2,10
28 0
|
2月前
|
人工智能 编译器 C语言
C语言:指针详解【图解 + 练习】
C语言:指针详解【图解 + 练习】