!!!排序仅针对于数组哦
本次排序是按照升序来的哦
介绍
快速排序英文名为SelectSort
从数组中找到最小的放到前边
基本思路
1、默认待排序数组中第一个作为最小值
2、找待排序数组(注意不是整个数组哦)中真正的最小值
3、找到真正的最小值和待排序数组第一个数据进行交换,真正的最小值到达正确位置
4、重复1、2、3
代码
java
复制代码
<!----java----->
public static void main(String[] args) {
int[] arr = {10,2,8,3,1};
sort(arr);
System.out.println(Arrays.toString(arr));
}
// 代码
public static void sort(int[] arr) {
for(int i=0;i<arr.length;i++) {
// 定义第一个数为最小值,其实就是i这个位置。因为第一轮为0,第二轮为1,。。。。
// 定义一个变量去接收最小值,默认为i
int minIndex = i;
for(int j=i+1;j<arr.length;j++) {
// 开始遍历后边的数
// 如果当前数比定义的最小的数还要小,交换
if(arr[j]<arr[minIndex]) {
minIndex = j;
}
}
// 退出循环后,此时minIndex指向的就是最小值。然后我们跟带排序数组的第一个位置交换
// 此时minIndex为最小数值的下标
// 这里可以不判断,就是自己跟自身多交换一次,也可以判断不同的才交换
if(i!=minIndex) {
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
}
<!------------------------>
运行结果;
[1, 2, 3, 8, 10]
python
复制代码
<!----python----->
def selectSort(arr):
for i in range(len(arr)):
min = i;
for j in range(i+1,len(arr)):
if(arr[j]<arr[min]):
min = j;
arr[i],arr[min] = arr[min],arr[i];
return arr;
arr = [10,2,8,3,1]
print(selectSort(arr))
<!------------------------>
运行结果;
[1, 2, 3, 8, 10]
没明白?老规矩,上图
复杂度
时间复杂度为:O(n^2)
空间复杂度:O(1)
它是非稳定排序
原地排序
推荐博客: