1.冒泡排序
冒泡排序:故名思意就像烧开的水一样,大的气泡,最先跑到上面去,在这里用算法实现就是将大的数字通过比较逐渐置换到后面
需要注意的点:
- 外层循环为数组长度(arr.length)减1
- 内层循环为(arr.length-i-1)
- 如果当前的值大于后面的值就进行交换
- 每一次循环都找出一个最大值
冒泡循环的复杂度为O(n^2)
public class BubbleSort {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = {5,6,8,2,7,9,3,2,96,6};
int l=arr.length;
int temp;
for(int i=0;i<l-1;i++) {
for(int j=0;j<l-1-i;j++) {
if(arr[j]>arr[j+1]) {
temp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for (int i = 0; i < l; i++) {
System.out.println(arr[i]);
}
}
}
2.选择排序
- 选择排序的基本思想是首先找到数组中最小的那一个元素,然后再将该元素与数组中的第一个元素交换位置。
- 再在剩下的元素中找出最小的那一个元素,然后再将该元素与数组中的第二个元素交换位置。
- 如此循环,最后实现数组的排序
需要注意的点:
- 外层循环为数组长度减1
- 内层循环是从外层的i开始,结束条件是数组长度减1
- 如果当前位置的数大于后面的数,就交换值,逐渐将小的数换到前面,以此类推,完成升序
- 冒泡循环的复杂度也为O(n^2)
//选择排序
public class SelectSort {
public static void main(String[] args) {
int[] arr = {5,6,8,2,7,9,3,2,96,6};
int l=arr.length;
for (int i = 0; i < l-1; i++) {
for (int j = i; j < l-1; j++) {
if(arr[i]>arr[j+1]) {
//使用位运算符^实现值的互换
arr[i]=arr[i]^arr[j+1];
arr[j+1]=arr[i]^arr[j+1];
arr[i]=arr[i]^arr[j+1];
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}