冒泡排序,选择排序,快速排序算法小总结

冒泡排序,选择排序,快速排序

排序算法小总结

开始接触算法的内容,写下博客防止自己忘记,可以有资料供自己翻阅。

仅是自己的个人理解!!!

冒泡排序

  1. 原理
    简单来说,冒泡算法就是比较相邻的两个元素,两两比较,大的在右边,小的在左边,一次循环里面把整个数组(长度为n)的最大数放在最右边,第二次循环,比较的是n-1个数,上限比第一次少1,因为最右边的已经是最大的了,在第一次循环已经排好了;重复两两比较,这n-1个中最大的数也放在最右边…一共循环n-1次。
    2.实现
    用Java语言写的
package Alogthim;
/*
冒泡排序
拿着相邻的元素比较,大的放在右边,小的放在左边,再继续向右走一位,与后续的继续比较
 */
/*
第一次循环
原始:3 5 8 2 4 1 9
开始循环:3和5比较,5在右,5和8比较,8在右,8和2比较,8在右,8和4比较,8在右,8和1比较,8在右,8和9比较,9在右,8在左
循环结束,此时数组是3 5 2 4 1 8 9
*/
 /*
第二次循环
3和5比较,5在右,5和2比较,5在右,5和4比较,5在右,5和1比较,5在右,5和8比较,8在右,5在左
循环结束,此时数组是3 2 4 1 5 8 9
*/
/*
第三次循环
3和2比较,3在右,3和4比较,4在右,4和1比较,4在右,4和5比较,5在右
循环结束,此时数组是2 3 1 4 5 8 9
 */
/*
第四次循环
2和3比较,3在右,3和1比较,3在右,3和4比较,4在右
循环结束,此时数组是2 3 1 4 5 8 9
 */
/*
第五次循环
得到2 1 3 4 5 8 9
 */
/*
第六次循环
得到1 2 3 4 5 8 9
 */
public class BubSort {
    public static void main(String[] args) {
        int [] a = {3,6,8,2,4,111,9};
//        for ( int i= 0 ; i<a.length ; i++){
//            for( int j= 0; j <a.length-1-i; j++ ){
//                if (a[j]>=a[j+1]){
//                    int temp=a[j];
//                    a[j]=a[j+1];
//                    a[j+1]=temp;
//                }
//            }
//        }
        for ( int i= a.length-1 ; i>0 ; i--){
            for( int j= 0; j <i; j++ ){
                if (a[j]>=a[j+1]){
                    int temp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=temp;
                }
            }
        }
        for( int i=0;i<a.length;i++){
            System.out.print(a[i]+"  ");
        }
    }
}

选择排序

1.原理
选择排序的原理和冒泡类似,同样是两两比较,但是不是比较相邻的两个元素值,而是选定一个最小值去比较,假设,我现在认为数组(长度为n)的第一个元素设为min,接下来就是拿第二个元素去与设定好的最小值比较,如果第二个比第一个小,就交换位置,否则,就保持不动;然后拿出第三个元素与上一轮比较出来的最小值进行比较,同样是大的在左边,小的在右边,一直循环下去,直至循环n-1次。
2.实现:Java代码实现

package Alogthim;
/*
每一次都是从这堆要比较的数据中找到最小的值,拿着这个最小的值与最左边的元素交换位置
选择排序比冒泡排序好在每次交换的位置为1
选择排序的效率比冒泡排序的效率高

选择排序的关键在于找最小
 */
public class SelectSort {
    public static void main(String[] args) {
        int [] a ={5, 3, 8,8,9,10,7};
//        第一种
//        for (int i = 0; i < a.length-1; i++)
//        {
//            int min = i ;
//            for (int j = i+1; j < a.length; j++)
//            {
//                if (a[min]>a[j])
//                {
//                    int temp =a[j];
//                    a[j]=a[min];
//                    a[min]=temp;
//                }
//
//            }
//        }
        //第二种
        for (int i = 0; i < a.length-1; i++)
        {
            int min = i ;
            for (int j = i+1; j < a.length; j++)
            {
                if (a[min]>a[j])
                min=j;
            }
            if (min!=i)
            {
                int temp;
                temp = a[min] ;
                a[min]=a[i];
                a[i]=temp;
            }
        }
        for ( int i = 0;i< a.length;i++)
        {
            System.out.println(a[i]);
        }

    }
}

快速排序

1.原理:
快速排序是利用一个基准,大于基准的放在右边,小于基准的放在左边,然后再对基准两边的集合再各选一个基准,重复上述操作,直至排序完成。
当在基准的右边找到一个比基准小的数,就将这个数移到基准的的位置,就是交换位置,而基准等到i=j的时候,即走到中间位置,基准放在这里。
2.Java实现

package Alogthim;

import java.util.Arrays;

public class QuickSort {
    public static void quicksort(int s[], int l, int r) {
//快速排序

            if (l < r)
            {
                //Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1
                int i = l, j = r, x = s[l];
                while (i < j)
                {
                    while(i < j && s[j] >= x) // 从右向左找第一个小于x的数
                        j--;
                    if(i < j)
                    {
                        int temp = s[j];
                        s[j] = s[i];
                        s[i] = temp;
//                        s[i] = s[j];
//                        i++;
                    }
//                        s[i++] = s[j];

                    while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数
                        i++;
                    if(i < j)
                    {
                        int temp = s[i];
                        s[i] = s[j];
                        s[j] = temp;
                    }
//                        s[j--] = s[i];
                }
                s[i] = x;
                quicksort(s, l, i - 1); // 递归调用
                quicksort(s, i + 1, r);
            }
        }


    public static void main(String[] args) {

        int[] a = { 49, 38, 85,49,65, 97, 88,985,451,552,45,15,16,85,276, 13, 27, 30 ,-45,-78};
        quicksort(a,0,a.length-1);
        System.out.println(Arrays.toString(a));
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值