[英]Selection Sort in C is not showing the right output
#include <stdlib.h>
#include <stdio.h>
void selection_sort(int array[],int num);
int main(void) {
int i,num;
printf("Write the number of elements :");
scanf("%d",&num);
int array[100];
for(i=0;i<num;i++){
scanf("%d",&array[i]);
}
selection_sort(array,num);
return 0;
}
//Doing selection sort algorithm :
void selection_sort(int array[],int num){
int i,j,min,temp;
for (i=0;i<num;i++){
min=i;
for(j=i+1;j<num;j++){
if (array[j]<array[i]){
min=j;
}
}
if (min!=i){
temp=array[i];
array[i]=min;
min=temp;
}
}
printf("Sorted elements :\n");
for (i=0;i<num;i++){
printf("%d\n",array[i]);
}
}
请让我知道为什么我无法显示已排序的元素
问题在于如何实施交换。
交换元素的正确方法是:
if (min!=i){
temp=array[i];
array[i]=array[min];
array[min]=temp;
}
查看以下更正后的代码:
#include <stdlib.h>
#include <stdio.h>
void selection_sort(int array[],int num);
int main(void) {
int i,num;
printf("Write the number of elements :");
scanf("%d",&num);
int array[100];
for(i=0;i<num;i++){
scanf("%d",&array[i]);
}
selection_sort(array,num);
return 0;
}
//Doing selection sort algorithm :
void selection_sort(int array[],int num){
int i,j,min,temp;
for (i=0;i<num;i++){
min=i;
for(j=i+1;j<num;j++){
if (array[j]<array[i]){
min=j;
}
}
if (min!=i){
temp=array[i];
array[i]=array[min];
array[min]=temp;
}
}
printf("Sorted elements :\n");
for (i=0;i<num;i++){
printf("%d\n",array[i]);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.