选择排序
选择排序是一个十分基础,简单的排序。
思路:1.找到数组中最小的元素,拎出来,将它和数组的第一个元素交换位置; 2.在剩下的元素中继续寻找最小的元素,拎出来,和数组的第二个元素交换位置; 3.如此循环,直到整个数组排序完成。
4.若是由大到小也是同样方法,只需要修改比较大小的符号;
public static void sort(int arr[])
{
for(int i=0;i<arr.length;i++){
int min = i;//最小元素的下标
for(int j=i+1;j<arr.length;j++){
if(arr[j] < arr[min]){
min = j;//找最小值
}
}
//交换位置
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
双重循环,时间复杂度为O(n2)
算
法
特
点
简
述
算法特点简述
算法特点简述
选择排序的方法,即使没有学过算法,日常生活中一般人遇见排序问题时,大多数用的就是选择排序。 进行由大到小的排序时,通常就是从中先挑出最大的,再从剩下来的中间挑出最大的,就这样挑完,就排好序了,很直观好懂。
个人在先前的老师教学中陷入误区,代码较上面比较如下(交换位置部分,存在问题):
int tmp = arr[min],k=arr.length;
while(k>i&&k<min){
arr[k]=arr[k-1];
}//将第i位后面的数据向后移一位
arr[i] = tmp;
该方法明显代价更高,比上面要移的数据量更多。当时前面正好讲了数组的插入部分,就套用过来,但是浪费太多次数据移位,算法效率,明显不如上面的部分;
优点:排序的稳定性要远好于上面的部分。