冒泡排序(BubbleSort)
冒泡排序的时间复杂度为O(n^2)。
1.比较相邻的元素,前一个比后一个大(或者前一个比后一个小)调换位置
2.每一对相邻的元素进行重复的工作,从开始对一直到结尾对,这步完成后,结尾为最大或最小的数.
3.针对除了最后一个元素重复进行上面的步骤。
4.重复1-3步骤直到完成排序
动画演示:
实现代码:
package Array;
//冒泡排序
public class BubbleSort {
public static void main(String[] args) {
bubblesort();//调用方法
}
public static void bubblesort(){
int arr[] = {5,3,2,9,1,7,8,6,4};
//i表示轮数
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-i-1;j++){
if(arr[j]>arr[j+1]){ //后者大于前者
int temp = arr[j];
arr[j] = arr[j+1]; //将arr[j+1]和arr[j]的位置互换
arr[j+1] = temp;
}
}
}
for (int i = 0; i < arr.length; i++) { //遍历排序后的数组
System.out.print(arr[i]+" ");
}
}
}
选择排序(Selection Sort)
以升序为例,第一趟,将数组中下标为0的元素和下标为1的元素进行比较,如果后面的元素比它小,则将下标为1的元素和下标为0的元素位置互换,然后再拿下标为0的元素和下标为2的元素进行比较.....下标为0的元素和所有元素排序完毕,再拿下标为2,3,4,......的元素按照上面流程继续进行排序。
动画演示:
实现代码:
package day05Array;
//选择排序 以升序排列
public class SelectedSort {
public static void main(String[] args) {
selectsort(); //调用方法
}
public static void selectsort(){
int arr[]={5,3,2,9,1,7,8,6,4}; //定义数组
for (int i = 0; i < arr.length-1; i++) {
for(int j =i+1;j<arr.length;j++){
if(arr[i]>arr[j]){ //后面的元素大于前一个元素
//进行位置互换
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
for (int i = 0; i < arr.length; i++) { //遍历排序好的数组
System.out.print(arr[i]+" ");
}
}
}
插入排序(Insertion-Sort)
它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
算法描述
动画演示:
- 从第一个元素开始,该元素可以认为已经被排序;
- 取出下一个元素,在已经排序的元素序列中从后向前扫描;
- 如果该元素(已排序)大于新元素,将该元素移到下一位置;
- 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
- 将新元素插入到该位置后;
- 重复步骤2~5。
实现代码:
package day05Array;
//插入排序
public class InsertSort {
public static void main(String[] args) {
insertSort();
}
public static void insertSort(){
int[] arr={5,1,3,2,7,4,9,8,6};
for(int i=1;i<arr.length;i++){
int e=arr[i];
int j=i-1;
while(j>=0&&arr[j]>e){
arr[j+1]=arr[j];
j--;
}
arr[j+1]=e;
}
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
}