【问题标题】:What's wrong with my C program? It's about pointer and selection sort我的 C 程序有什么问题?这是关于指针和选择排序
【发布时间】:2017-09-24 02:04:12
【问题描述】:

我的 C 程序有什么问题?标题是从小到大对 n 个数字进行排序,当我运行它时,一切正常,但数字没有被排序。虽然想了很久,但就是不知道怎么解决。

代码如下:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

void selection(int *a[], int n);
int main()
{
    int n;
    int i;
    scanf("%d", &n);
    int *a[n];
    int b[n];
    srand((int) time(0));
    for (i = 0; i < n; i++)
    {
        b[i] = ((int) (rand() % 100));
        a[i] = &b[i];
    }
    selection(a, n);
    return 0;
}

void selection(int *a[], int n)
{
    int i;
    int j;
    int position;
    int temp;
    for (i = 0; i < n - 1; i++)
    {
        position = i;
        for (j = i + 1; j < n; j++)
        {
            if (*a[i] > *a[j])
                position = j;
        }
        temp = *a[i];
        *a[i] = *a[position];
        *a[position] = temp;
    }
    for (i = 0; i < n - 1; i++)
        printf("%d\n", *a[i]);
}

【问题讨论】:

  • 代码真的是关于快速排序的吗?
  • 你为什么要quicksort而你的函数名是bubble...o.O
  • @Junsong Huang 没有快速排序,也没有冒泡排序。我认为有写错的选择排序。:)
  • @JunsongHuang 当你说quicksort,你的意思是qsort 对吗?

标签: c arrays sorting pointers selection-sort


【解决方案1】:

我在提供的代码中既没有找到快速排序也没有找到冒泡排序。

您似乎正在尝试使用选择排序。

我认为该函数可以如下所示。

void selection_sort( int * a[], int n )
{
    int i;

    for ( i = 0; i < n; i++ )
    {
        int position = i;
        int j = i + 1;

        for ( ; j < n; j++ )
        {
            if ( *a[j] < *a[position] ) position = j;
        }

        if ( position != i )
        {
            int *temp = a[position];
            a[position] = a[i];
            a[i] = temp;
        }
    }

    for ( i = 0; i < n; i++ ) printf( "%d ", *a[i] );
    putchar( '\n' );
}

【讨论】:

  • 非常感谢!这是我关于指针的问题。所以我可以认为我应该交换地址而不是值,如果我交换值,因为地址没有改变,当做'printf'时,值不会改变。
  • @JunsongHuang 看来您正试图根据一个指针指向的一个值小于另一个指针指向的值的标准对指针数组进行排序。即原始值数组没有改变。改变的是指向原始数组元素的指针数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 2019-03-08
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 2021-06-13
相关资源
最近更新 更多