C 中的选择排序未显示正确的输出
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]);
}
}
#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]);
}
}