c - C 中数组的选择排序

标签 c arrays

我正在尝试用 C 创建一个简单的(?)选择排序程序,它选择整数数组的最大整数并将其放置在位置 a[n-1] 中,将第二大数字放置在 a[n 中-2],依此类推,直到最小的数字放入a[0]中。我已经在纸上运行了下面的代码,看起来它应该可以工作,但是当我编译它时,我得到了错误的结果。我是否遗漏了一些明显的东西?

/* The program implements selection sort*/

#include <stdio.h>
#include "simpio.h"

#define n 5

void GetArray(int a[]);
void SelectionSort(int a[]);
int FindMax(int a[], int high);
void swap(int a[], int p1, int p2);
void PrintArray(int a[]);

main()
{
      int a[n];
      GetArray(a);
      SelectionSort(a);
      PrintArray(a);
      getchar();
}

void GetArray(int a[])
{
     int i;
     for(i=0;i<n;i++)
     {
       printf("Enter integer# %d", i+1);
       a[i]=GetInteger();
     }
}

void SelectionSort(int a[])
{
     int i, max;
     for(i=0;i<n;i++)
     {
           max=FindMax(a,i);
           swap(a,max,(n-1-i));
     }     
}

int FindMax(int a[], int high)
{
    int i, index;
    index=high;
    for(i=high;i<n;i++)
    {
       if(a[i]>a[index])
          index=i;
    }
    return index;
}

void swap(int a[], int p1, int p2)
{
     int temp;
     temp=a[p2];
     a[p2]=a[p1];
     a[p1]=temp;
}

void PrintArray(int a[])
{
     int i;
     for(i=0;i<n;i++)
       printf("a[%d]=%d\n", i, a[i]);
}

最佳答案

选择排序是比较列表中最小元素并从最小索引开始放置的过程。 现在考虑下面的代码片段。

public void selectionSort(int[] elements) {
    
    for(int i=0;i<elements.length;i++) {
        int minPosition = i;
        for(int j=i+1;j<elements.length;j++) {              
            if(elements[minPosition]>elements[j])
                minPosition = j;                
        }

        int temp = elements[i];
        elements[i] = elements[minPosition];
        elements[minPosition] = temp;       
    }
}

感谢您的阅读,请让我知道反馈以改进我的方面

关于c - C 中数组的选择排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9387958/

相关文章:

C++ 返回结构数组

c - 使用 open() 和 mmap() 在进程之间共享文本文件

c - C语言产生0到1之间随机数的问题

arrays - Julia代码优化: vector calculation and taking sum

javascript - 在Javascript中寻找一种将具有重复数据的列样式数组转换为对象的方法

PHP 迭代器不能通过引用与 foreach 一起使用

c++ - C++11 中不同类型对象的 std::array 替代方案

c - 链接列表错误(语言: C)

C 结构数组输入

c - 错误 : parameter for <variable> is initialized in C