选择排序与插入排序的实现以及特点对比

575 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

选择排序

算法解析

选择排序的选择实际上就是每次选择序列中最小或者最大的一个,把它放在前面。我们可以这样理解,假设我们在堆积木,我们每次都要找到最大的一块放在下面,第二次再找除了这一块的剩余的最大块积木。这样我们就能理解选择排序了。

image.png

image.png

selectionSort.gif 图片来源

代码实现

//选择排序 
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、十的前面。下一张牌是个小王我们就先暂且不动这张牌的位置。

insertionSort.gif 图片来源

//插入排序 
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;
    }
}

两者的特点与比较

选择排序每进行一个数字的定位都需要遍历整个数组,而插入排序是每一个数字向前查找,而无需遍历整个数组。那我们该如何选择这两种排序算法呢?假设我们需要进行排序的文件十分大,用硬盘存储,这个时候如果我们使用选择排序就意味着,每次排序都要将磁盘中的文件全部读取一遍,而这样是十分耗费时间的。所以这个时候我们更适合使用插入排序。