一、代码
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 20
#define ERROR 0
#define OK 1
typedef int Status
;
void selectSort(int data
[]);
int main(int argc
, char *argv
[]) {
int data
[MAXSIZE
],i
,arrSize
;
printf("请输入待排序的数组大小:");
if(scanf("%d",&arrSize
)==0)
{
printf("输入有误!\n");
return ERROR
;
}
printf("请输入待排序数组:");
data
[0]=arrSize
;
for(i
=1;i
<=arrSize
;i
++)
{
scanf("%d",&data
[i
]);
}
printf("开始简单选择排序\n");
selectSort(data
);
printf("排序结果为:");
for(i
=1;i
<=arrSize
;i
++)
{
printf("]",data
[i
]);
}
return 0;
}
void selectSort(int data
[])
{
int i
,j
,min
;
for(i
=1;i
<data
[0];i
++)
{
min
=i
;
for(j
=i
+1;j
<=data
[0];j
++)
{
if(data
[min
]>data
[j
])
min
=j
;
}
if(i
!=min
)
{
int mid
;
mid
=data
[i
];
data
[i
]=data
[min
];
data
[min
]=mid
;
}
}
}
二、算法解释
案例:对21 25 49 26 16 08使用简单选择排序进行排序 原始序列:21 25 49 26 16 08 第一步:找到最小值08 与序列中第一个位置进行交换 08 25 49 26 16 21 第二步:接着在25 49 26 16 21 中找到最小值和第二个位置交换 08 16 49 26 25 21 现在前两个位置已经排好了 第三步:重复上面的操作 08 16 21 26 25 49 第四步:08 16 21 25 26 49 第五步:08 16 21 25 26 49 现在已经排序好了,一共循环6次,也就是说n个数的数列循环n-1次
三、代码中重要的函数或语句
void selectSort(int data
[])
{
int i
,j
,min
;
for(i
=1;i
<data
[0];i
++)
{
min
=i
;
for(j
=i
+1;j
<=data
[0];j
++)
{
if(data
[min
]>data
[j
])
min
=j
;
}
if(i
!=min
)
{
int mid
;
mid
=data
[i
];
data
[i
]=data
[min
];
data
[min
]=mid
;
}
}
}
上面代码是简单选择排序的核心,其中
if(i
!=min
)
{
int mid
;
mid
=data
[i
];
data
[i
]=data
[min
];
data
[min
]=mid
;
}
上面代码是进行交换位置
第一层循环
for(i=1;i<data[0];i++)
是循环n-1次,这一点需要注意。 再者需要注意的地方就是下面代码
min
=i
;
for(j
=i
+1;j
<=data
[0];j
++)
{
if(data
[min
]>data
[j
])
min
=j
;
}
上面代码就是寻找最小值的位置,并存放在min中。
四、运行截图