小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
选择排序
算法解析
选择排序的选择实际上就是每次选择序列中最小或者最大的一个,把它放在前面。我们可以这样理解,假设我们在堆积木,我们每次都要找到最大的一块放在下面,第二次再找除了这一块的剩余的最大块积木。这样我们就能理解选择排序了。
代码实现
//选择排序
void select_sort( int arr[], int len ){
int i=0,j=0;
for(i=0;i<len-1;i++){
int min=i;
for(j=i+1;j<len;j++){
if(arr[j]<arr[min])
min=j;
}
int temp=arr[min];
arr[min]=arr[i];
arr[i]=temp;
}
}
插入排序
算法解析
插入排序就是我们打扑克牌时的整理牌的思路。我们捏了一手牌,从左到右,顺序混乱。我们先看第一张,是个J,我们再看第二张,发现是张十,我们就把十放到J前面,第三张我们的牌是一张三,我们就把三放到J、十的前面。下一张牌是个小王我们就先暂且不动这张牌的位置。
//插入排序
void insert_sort( int arr[], int len ){
int i,j;
for(i=1;i<len;i++){
int key=arr[i+1];
j=i-1;
while(arr[j]>key&&j>=0){
arr[j+1]=arr[j];
j--;
}
arr[j+1]=key;
}
}
两者的特点与比较
选择排序每进行一个数字的定位都需要遍历整个数组,而插入排序是每一个数字向前查找,而无需遍历整个数组。那我们该如何选择这两种排序算法呢?假设我们需要进行排序的文件十分大,用硬盘存储,这个时候如果我们使用选择排序就意味着,每次排序都要将磁盘中的文件全部读取一遍,而这样是十分耗费时间的。所以这个时候我们更适合使用插入排序。