C语言选择排序的解法
C语言选择排序的解法1 #include <stdio.h>
2
3 // 选择排序:相邻两个元素进行比较,把大的元素的下标记录下来,一轮完整的比较之后,若最大值的下标不是len-i,则两个元素交换位置
4 void select_sort(int arr[],int len)
5 {
6 for(int i=0; i<len; i++) // 总共要找len-1次最大值,每次找最大值的区间
7 {
8 int index_nmax = 0;
9 for(int j=1; j<len-i; j++) // 因为假设了0下标就是最大值,所以循环可以从1开始
10 {
11 if(arr > arr)
12 {
13 index_nmax = j;
14 }
15 }
16 if(index_nmax != len-i-1) // 避免无意义的位置交换
17 {
18 int tmp = arr;
19 arr = arr;
20 arr = tmp;
21 }
22 }
23 }
24
来自https://www.cnblogs.com/usingnamespace-caoliu/p/9428115.html # include <stdio.h>
int main(void)
{
int i, j;//循环变量
int MinIndex;//保存最小的值的下标
int buf;//互换数据时的临时变量
int a[] = {5, 5, 3, 7, 4, 2, 5, 4, 9, 1, 8, 6};
int n = sizeof(a) / sizeof(a);//存放数组a中元素的个数
for (i=0; i<n-1; ++i)//n个数比较n-1轮
{
MinIndex = i;
for (j=i+1; j<n; ++j)//每轮比较n-1-i次, 找本轮最小数的下标
{
if (a > a)
{
MinIndex = j;//保存小的数的下标
}
}
if (MinIndex != i)/*找到最小数之后如果它的下标不是i则说明它不在最左边, 则互换位置*/
{
buf = a;
a = a;
a = buf;
}
}
printf("最终排序结果为:\n");
for (i=0; i<12; ++i)
{
printf("%d ", a);
}
printf("\n");
return 0;
}
页:
[1]