-
Notifications
You must be signed in to change notification settings - Fork 779
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
2019-05-17:什么是冒泡排序?如何优化? #56
Comments
你猜?😏 通过一个标识符,判断内层循环,循环结束时没有进行数据交换操作,表示已经有序,结束循环 |
你猜我猜不猜 |
冒泡排序算法原理:(从小到大排序) 优化方案1(定义一个变量l来保存一趟交换中两两交换的次数,如果l==0,则说明排序已经完成,退出for循环) |
很棒~ |
/**
* 排序思想:
* 对一组数字进行从小到大或者从大到小的进行排序。
* 它是通过让相邻的两个元素进行比较,大的元素向下沉,小的元素向上冒
* arr[0]与arr[1]进行比较,如果前者大于后者,则交换位置
* 然后arr[1]与arr[2]进行比较,以此类推。当进行到n-1轮后,排序完成。
*/
import java.util.Arrays;
public class Sort {
public static void main(String[] args){
int arr[]= {100,90,101,23,13,75};
int temp=0;
for(int i=0;i<arr.length-1;i++) {
for(int j=0;j<arr.length-1-i;j++) {
if(arr[j]>arr[j+1]) {
temp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
}
System.out.println("第["+(i+1)+"]轮,排序结果:"+ Arrays.toString(arr));
}
System.out.print("================================");
int arr2[]= {100,90,101,23,13,75};
sort2(arr2);
}
/**
* 优化思路:
* 假如在第1轮比较当中,发现所有的元素都没有进行交换,则说明此原数据就是有序的,不需要再进行排序
* @param arr
*/
public static void sort2(int arr[]){
int temp=0;
int flag=0;
for(int i=0;i<arr.length-1;i++) {
flag=0;
for(int j=0;j<arr.length-1-i;j++) {
if(arr[j]>arr[j+1]) {
temp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
//如果有交换的行为,则flag=1
flag=1;
}
}
//说明上面 内for循环中,没有交换任何元素。
if(flag==0) {
break;
}
System.out.println("第["+(i+1)+"]轮,排序结果:"+Arrays.toString(arr));
}
}
} |
有在实践中应用过冒泡排序的吗? |
冒泡排序: |
冒泡排序: int[] ints = {52,7,2,9,1,7,653,1,47,55,5}; |
上图 很形象啊 打卡打卡 |
很形象,打卡 |
打卡,上图点赞 |
首先冒泡排序,每次都与前一个进行比较,然后交换。所以,它的时间复杂度是:4*O(n^2) 对冒泡排序最直接的优化是:“插入排序”;它的思想是,假设【0,k,n】当前位置是k,那么【0,k-1】是有序的,k在【0,k-1】中的某一个位置插入,假设位置是i,则将【i,k】往后搬移即可。它的时间复杂度是:O(n^2) 对冒泡排序还有其它的优化方式,但原理已经相差比较大了。例如:并归排序、快速排序、堆排序 另外说明:记录一个flag,满足条件退出,并不算算法上的优化。 |
No description provided.
The text was updated successfully, but these errors were encountered: