快速排序
来源:互联网 发布:mysql索引失效 in or 编辑:程序博客网 时间:2024/04/27 16:41
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); int[] a = {12, 20, 5, 16, 15, 1, 30, 45, 23, 9}; int start = 0; int end = a.length - 1; sort(a, start, end); for (int i = 0; i < a.length; i++) { Log.e("arr:", "" + a[i]); } } /** * 算法规则: 本质来说,快速排序的过程就是不断地将无序元素集递归分割,一直到所有的分区只包含一个元素为止。 * 由于快速排序是一种分治算法,我们可以用分治思想将快排分为三个步骤: * 1.分:设定一个分割值,并根据它将数据分为两部分 * 2.治:分别在两部分用递归的方式,继续使用快速排序法 * 3.合:对分割的部分排序直到完成 * * @return */ public void sort(int arr[], int star, int end) { //记录开始的位置 int s = star; //记录最后的位置 int e = end; //找到基准数,一般都是第一个 int key = arr[star]; //根据循环判断这个数组,是否大于一个元素。 while (end > star) { //从右向左找,比他小的数 while (end > star && arr[end] >= key) end--; //如果这个数比基准数小,就交换位置 if (arr[end] <= key) { int tenmp = arr[star]; arr[star] = arr[end]; arr[end] = tenmp; } //从左向右找,找到比他大的数 while (end > star && arr[star] < key) star++; //然后进行替换 if (arr[star] > key) { int tenmp = arr[star]; arr[star] = arr[end]; arr[end] = tenmp; } } //判断刚开始的位置改变了没有,如果改变了就是在进行排序 if (s < star) sort(arr, s, star - 1); //判断结束的位置是否改变,因为是从右向左走的下标肯定是变小 if (e > end) sort(arr, end + 1, e); }}
阅读全文
0 0
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 数据结构与算法(Java描述)-5、循环链表仿真链表以及循环链表应用
- 【20171020】常用经典算法介绍
- PullToRefresh ScrollView的Listview和轮播图布局
- 博客搬迁
- 2017.10.20 LeetCode Two Pointers 26. 27.
- 快速排序
- 给定填充0和1的二维二进制矩阵,找到包含所有的最大矩形并返回其区域。
- mysql授权表
- sql内链接,左连接,右链接和多表笛卡儿积
- PullToRefresh ScrollView的Listview和轮播图Fragment布局
- python高阶函数调用
- 写什么随机化!(非酋的怒吼)
- 新环境编译安装CentOS 7 php7
- 产品进度中如何确定产品质量?我该不该继续?