选择排序是一种简单直观的排序算法,它通过在未排序部分中选择最小(大)的元素,加入到已排序部分的末尾,依此类推,直到未排序部分为零。
动画演示
由动画可见,数组被分为两个部分,已排序和未排序,每次从未排序部分中选择最小的元素加到已排序部分的末尾,直至未排序部分为空,整个数组就只剩下已排序部分,则完成排序。
算法描述
- 两个循环,外循环指针表示已排序部分和未排序部分的分隔点;
- 内循环遍历未排序部分,找到最小元素的下标,然后将最小元素和已排序部分的下一个元素交换,分割点后移一位。
代码
public void swap(int[] nums, int i, int j){
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
public void sort(int[] nums) {
for(int i = 0;i < nums.length;i++){
int min = i;
for(int j = i;j < nums.length;j++){
min = nums[min] > nums[j] ? j : min;
}
swap(nums, min, i);
}
}
分析
排序算法 | 时间复杂度 (平均) |
时间复杂度 (最坏) |
时间复杂度 (最好) |
空间复杂度 | 稳定性 |
---|---|---|---|---|---|
选择排序 | 不稳定 |
网友评论