谈谈选择排序吧
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{ int len = 0;
int str[100] = {5,4,3,2,1};
while(str[len])
{
len ++;
}
printf("数组的长度为:%d\n", len);
int j;
int i;
int temp;
for(i = 0;i < len - 1;i++)
{
int min = i;
for(j = i+1;j < len;j++)
{
if(str[min] > str[j])
min = j;
}
if(min != i)
{
temp = str[min];
str[min] = str[i];
str[i] = temp;
}
}
for(i = 0;i < len;i++)
printf("%d",str[i]);
printf("\n");
return 0;
}
长时间不看也是模模糊糊才能想起来
整个逻辑是、
我们从第一个数开始(姑且就从第一个数开始)把第一个数看作目前见到的最小的数
从左向右遇见比第一个数大的就两个替换(是和第一数替换并不是相邻的替换)
挨个比比看 一直比到结束 比了 (整个数组的长度减一)次
然后从第二个数比 一直逼到倒数第二个数 就结束了
但是逻辑往往电脑不知道的 程序的内容是这样的
从最小的下标(定为目前为止最小的数)开始 比
如果这个目前为止最小的数比我们比的数大 就互换下标(目前只是呼唤下标)
在接下来 这个最小的数不是之前的那个“目前为止最小的数了”我们就要换数据了
就这样一直下去