这两种数组排序算法较为常见,属于必会的基础算法
堆排序属于选择排序,选择排序属于交换排序
选择排序:
时间复杂度:O(n²)
冒泡排序:
时间复杂度:O(n²)
选择排序代码示例:
就拿数组{4,7,3,6,9}来说
1、先拿arr[0]的4和后面的4个数进行对比,利用k来记录最小的数的坐标。
2、通过比对4和7,4和3后得到坐标k=2是最小。(后面比对也是3最小,因此k依然等于2)
3、比对k和i的值是否相等(相等的话证明当前arr[i]的数对比后面来说是最小),不相等的话就通过temp来交换他们的坐标。
4、得出交换后的数组为{3,7,4,6,9}。
5、重复循环最后得出结果(i循环中,i<arr.length -1是因为最后的数不用再进行比对)
public void test2(){
int[] arr = {4,7,3,6,9};
System.out.println("数组排序前");
for (int i : arr) {
System.out.print(i + "\t");
}
for (int i = 0; i < arr.length-2; i++) {
int k = i;
for (int j = i+1; j < arr.length; j++) {
if (arr[k] > arr[j]){
k = j;
}
}
if (k != i ){
int temp = arr[i];
arr[i] = arr[k];
arr[k] = temp;
}
}
System.out.println("\n数组排序后");
for (int i : arr) {
System.out.print(i + "\t");
}
}
冒泡排序代码示例:
public void test1(){
int[] arr = new int[]{1,56,43,26,78,26,45,-98};
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length - 1; j++) {
if (arr[j] > arr[j + 1]){
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
如有错误,欢迎指正。