排序

来源:互联网 发布:sql注入的原理 编辑:程序博客网 时间:2024/04/29 09:23

(1)冒泡排序

1.思路:

两重循环,

第一重循环表示需要比较哪些数据,(因为最大的放在最后面,就不用比了;次大的放在倒数第二个,也不用比了)

第二重循环表示从第0个开始比较,直至那个数据

        2.代码

<span style="white-space:pre"></span>int[] test = new int[]{34,23,67,56,78,43,63,28};for(int i=test.length-1; i>0; i--) //第一次肯定连最后一个也要比较,所以开始为最后一个的下标;如果未比较的只剩一个,那么就不用比较了{for(int j=0; j<i; j++)//从第一个开始,比较到最后一个未确定位置的{ if(test[j]>test[j+1]){int temp = test[j];test[j] = test[j+1];test[j+1] = temp;}}}

(2)快速排序

          1.思路

                    1)调整区间,以第一个元素为标识flag,从尾部向前比较,如果a[end]<flag,则end--,否则a[end]赋值给之前挖的坑(即为a[begin]),同时从begin开始比较,如果a[begin]<flag,则begin++,否则a[begin]>=flag,则a[begin]赋值给之前挖的坑(即为a[end]),再从end位置重复该过程,直至begin>=end,最后将flag赋值给begin、end相遇的地方

                    2)根据flag分开的两个区间,对这两个区间进行如上调整

                    3)注意:只有在比较元素的时候含=,其余均为>或<

         2.代码

private static void quick_sort(int[] a, int begin, int end){if(begin<end){int mid = adjust(a, begin, end);quick_sort(a, begin, mid-1);quick_sort(a, mid+1, end);}}private static int adjust(int[] a, int begin, int end) {int flag = a[begin];while(begin<end){while(begin<end && a[end]>=flag)end--;if(begin<end)a[begin] = a[end];while(begin<end && a[begin]<=flag)begin++;if(begin<end)a[end] = a[begin];}a[begin] = flag;return begin;}




0 0
原创粉丝点击