冒泡排序
定义:通俗来说,就是简单的比较相邻的元素,使得元素有序。
package huawei;
/**
* @author zhang kun
* @Classname Sort
* @Description TODO
* @Date 2021/7/2 19:18
*/
public class Sort {
public static void main(String[] args) {
int[] arr = {2,34,1,3,5,7,4};
int n = arr.length;
for(int i = 0;i<n;i++){
for(int j = 0;j<n-1-i;j++){
if(arr[j] > arr[j+1]){
swap(arr,j,j+1);
}
}
}
for (int i = 0; i < n; i++) {
System.out.print(arr[i] + " ");
}
}
private static void swap(int[] arr, int j, int i) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
优化一
如果有一趟排序没有交换元素,说明这组数据已经有序,不用再继续下去。直接返回
package huawei;
/**
* @author zhang kun
* @Classname Sort
* @Description TODO
* @Date 2021/7/2 19:18
*/
public class Sort {
public static void main(String[] args) {
int[] arr = {2,34,1,3,5,7,4};
int n = arr.length;
MySorts(arr);
for (int i = 0; i < n; i++) {
System.out.print(arr[i] + " ");
}
}
private static void MySorts(int[] arr) {
int n = arr.length;
for (int i = 0; i < n; i++) {
int flag = 0;
for(int j = 0;j<n-1-i;j++){
if(arr[j] > arr[j+1]){
swap(arr,j,j+1);
flag = 1;
}
}
if(flag == 0){
return;
}
}
}
private static void swap(int[] arr, int j, int i) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
优化二
优化一仅仅适用于连片有序而整体无序的数据(例如:1, 2,3 ,4 ,7,6,5)。但是对于前面大部分是无序而后边小半部分有序的数据(1,2,5,7,4,3,6,8,9,10)排序效率也不可观,对于种类型数据,我们可以继续优化。既我们可以记下最后一次交换的位置,后边没有交换,必然是有序的,然后下一次排序从第一个比较到上次记录的位置结束即可。
package huawei;
/**
* @author zhang kun
* @Classname Sort
* @Description TODO
* @Date 2021/7/2 19:18
*/
public class Sort {
public static void main(String[] args) {
int[] arr = {2,34,1,3,5,7,4};
int n = arr.length;
MySorts_2(arr);
for (int i = 0; i < n; i++) {
System.out.print(arr[i] + " ");
}
}
private static void MySorts_2(int[] arr) {
int n = arr.length;
int index = n-1;
for (int i = 0; i < n; i++) {
int flag = 0;
int postiton = 0;
for(int j = 0;j<index;j++){
if(arr[j] > arr[j+1]){
swap(arr,j,j+1);
flag = 1;
postiton = j;
}
}
if(flag == 0){
return;
}
index =postiton;
}
}
private static void swap(int[] arr, int j, int i) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}