生活中的算法____选择排序
排序有个前提,就是将要排序的是同一数据类型,选择排序算法类似于打麻将整理清一色麻将的过程,假如麻将不能移动,只能交换的话,玩家会从头到尾部找一张最小的牌,然后与第一位置的牌交换位置,然后从剩下牌中依次找到最小的放到i张牌中,使之从小到大排好序。
简单选择排序的基本思想:
第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;
第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;
以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,
使有序序列不断增长直到全部排序完毕。
以下为简单选择排序的存储状态,其中大括号内为无序区,大括号外为有序序列:
初始序列:{ 49 27 65 97 76 12 38 }
第1趟:12与49交换:12 { 27 65 97 76 49 38 }
第2趟:27不动:12 27 { 65 97 76 49 38 }
第3趟:65与38交换:12 27 38 { 97 76 49 65 }
第4趟:97与49交换:12 27 38 49 { 76 97 65 }
第5趟:65与76交换:12 27 38 49 65 { 97 76 }
第6趟:97与76交换:12 27 38 49 65 76 97 完成
#include<stdio.h>
//选择排序
void select_sort(int *arr,int len)
int i,j,index,h;
int temp;
for(i=0;i<len-1;i++) / /i是第i次排序,j是比较字符的位置下标【n-1趟排序】{
index=i; //假设index是最小的
for(j=i+1;j<len;j++) //查找最小记录的位置
{
if(arr[j]<arr[index]) //若无序区第一个元素不是无序区中最小元素,则进行交换
{
index=j;
}
}
if(index!=i)
{
temp=arr[i];
arr[i]=arr[index];
arr[index]=temp;
}
printf("第%d步排序结果:",i);
for(h=0;h<len;h++)
{
printf("%d ",arr[h]);
}
printf("\n");
}
}。