呕血之作-选择排序,冒泡排序原理图解(2&3)-时间多美好,唯你是我情之所钟

Posted taoisall

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了呕血之作-选择排序,冒泡排序原理图解(2&3)-时间多美好,唯你是我情之所钟相关的知识,希望对你有一定的参考价值。

1选择排序
/**
* 选择排序(Selection sort)是一种简单直观的排序算法。
* 它的基本思想是:首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置;接着,再从剩余未排序的元素中继续寻找最小(or最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
* 选择排序为两层for循环嵌套,内层循环始终去找最小值,放到最前面。交换次数比冒泡排序少很多,所以实际执行效率比冒泡排序快。 衍生算法,双向选择排序(每次循环,同时选出最大值放在末尾,最小值放在前方),可以提高选择效率。
*
* */

public class sort2 {
public static void main(String[] args) {
int [] a={20,40,30,10,60,50};
//selectSort(a,a.length);
       bubbleSort(a);
System.out.println("排序结果:"+ Arrays.toString(a));
}
public static void selectSort(int[] a, int n) {
int i; // 有序区的末尾位置
       int j; // 无序区的起始位置
       int min; // 无序区中最小元素位置
       for (i = 0; i < n; i++) {
min = i;
// 找出"a[i+1] ... a[n]"之间的最小元素,并赋值给min。
           for (j = i + 1; j < n; j++) {
if (a[j] < a[min])
min = j;
}
// 若min!=i,则交换 a[i] 和 a[min]。
           // 交换之后,保证了a[0] ... a[i] 之间的元素是有序的。
           if (min != i) {
int tmp = a[i];
a[i] = a[min];
a[min] = tmp;
}
}

}
/*
冒泡排序在代码实现上是最简单的,不需要什么思考,两层for循环嵌套,比大小交换。因为冒泡通常的例子都是让大的往后移,对于刚接触排序的人来说看来上面可能认为冒泡排序与选择排序是反向操作,其实冒泡排序也可以把小数向前移,这样能明显的看出冒泡排序和选择的排序的不同,针对无序区的元素,冒泡排序总是不断地交换,而选择排序是先找出最小的元素再做一次交换。 衍生算法,鸡尾酒排序,该排序从左往右找出最大值后,再从右往左,找出最小值,类似鸡尾酒搅拌左右循环。在某些情况下,优于冒泡排序,以序列(2,3,4,5,1)为例,鸡尾酒排序只需要访问两次(升序降序各一次 )次序列就可以完成排序,但如果使用冒泡排序则需要四次。
*/
   public static void bubbleSort(int[] a){
int temp;
for(int i = 0; i < a.length - 1; i++){ //外层循环,从数组第一个元素到倒数第二个元素,时间复杂度为N
           for(int j = 0; j < a.length - 1 -i; j++){ //内层循环,从数组第一个元素到剩余的元素(减去有序区的元素)
               if(a[j] > a[j+1]){
temp = a[j+1];
a[j+1] = a[j];
a[j] = temp; //相邻元素只要前面的比后面的大,就交换位置
               }
}
}
}
}

2冒泡排序

代码见上面.

以上是关于呕血之作-选择排序,冒泡排序原理图解(2&3)-时间多美好,唯你是我情之所钟的主要内容,如果未能解决你的问题,请参考以下文章

Day562.冒泡排序&选择排序 -数据结构和算法Java

数组冒泡排序选择排序二分查找法

十大排序总结(js实现稳定性内外部排序区别时间空间复杂度冒泡快速直接选择堆直接插入希尔桶基数归并计数排序)

算法交换排序——快速排序+冒泡排序

图解冒泡排序,鸡尾酒排序

图解排序算法之3种简单排序(选择冒泡直接插入)