选择排序算法:
<span style="font-size:18px;">#include<stdio.h>
void selectsort(int a[], int len )
{
int i=0,j=0;
int temp=0,min=0;
for(; i<len; i++) // 控制行数
{
min=i; // 将第i个元素的下标作为最小元素的下标记录,然后用这个元素与剩余的元素进行比较
for(j=i+1;j<len;j++) // 比如这里 : a[5]={ 5, 4, 1, 3, 2}
{
if(a[min]>a[j]) // 若 min为2 ,那么j 便是 从 3 到 4,即a[2]分别与a[3],a[4]一一比较
{
temp=a[min];
a[min]=a[j];
a[j]=temp;
}
}
}
}
int main()
{
int test[]={5, 4, 1, 3, 2};
int n=sizeof(test)/sizeof(int);
int i=0;
printf(" 在排序之前:\n ");
while(i<n)
printf("%3d ",test[i++]);
printf("\n");
selectsort(test,n);
printf(" 在排序之后:\n ");
i=0;
while(i<n)
printf("%3d ",test[i++]);
}</span>
还有可以这样看: 其实思想是一样的
- void SelectSort(int arr[], int count)
- {
- int i,j,min=0,temp=0;
- for(i=0; i<count; i++ )
- {
- min = arr[i];//以此元素为基准
- for(j=i+1; j<count; j++ )//从j往前的数据都是排好的,所以从j开始往下找剩下的元素中最小的
- {
- if(min>arr[j])//把剩下元素中最小的那个放到arr[j]中
- {
- temp = arr[j];
- arr[j] = min;
- min = temp;
- }
- }
- }
- }
这里你或许会困惑: 怎么实参的值就这样变了呢,解释如下:
在变量作函数参数时,所进行的值传送是单向的。即只能从实参传向形参,不能从形参传回实参。形参的初值和实参相同,而形参的值发生改变后,实参并不变化,两者的终值是不同的。
而当用数组名作函数参数时,情况则不同。由于实际上形参和实参为同一数组,因此当形参数组发生变化时,实参数组也随之变化。当然这种情况不能理解为发生了“双向”的值传递。但从
实际情况来看,调用函数之后实参数组的值将由于形参数组值的变化而变化