我正在尝试用 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/