常用排序(冒泡、快速、选择)
来源:互联网 发布:javascript排序 编辑:程序博客网 时间:2024/06/06 00:13
常见排序算法01
1、冒泡排序
冒泡排序思想是从头开始扫描待排序的元素,在这过程中相邻两个元素之间进行比较,将较大的数向后移,(即大数向下沉,小数向上冒),经过从头到尾的一次扫描后,当前最大的数就会被移动到最后一位了,然后记下这个位置,下一次扫描只需扫描到这个位置即可(即第i次扫描需要比较n-i次)。第i次扫描会将一个第i大的数排到倒数第i位上。
代码实现:
public void MPsort(){ for (int i = 0; i < a.length; i++) { for (int j = 0; j < a.length-1-i; j++) { if(a[j]>a[j+1]){ temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } }}
2、快速排序
快速排序思想是在所要排序的序列中找一个数作为基准数(pivot),一般选择所要比较的序列中第一个数,然后将比基准数大的放在基准数的右边,比基准数小的放在其左边。这样经过一次排序后,这个基准数的位置就会确定下来了。确定这个基准数后再对其左右两边的数分别做以上操作,最终即可确定所要数的位置了。
举例说明:(图片来源网上)
如图所示,有10位数组成的序列。设置两个哨兵,令哨兵i指向第一个元素,则6为当前基准数,令j指向最后一个元素。
首先令哨兵j开始向左移动,直至找到一个比基准数6小的数,如图找到数字5;然后哨兵i开始向右移动,直至找到一个比基准数6大的数,如图找到7.然后将5和7进行交换。
第一次交换结束后,j继续移动,找到4;i移动,找到9,将4和9进行交换。
最后,i和j在3的前面相遇,这时一次扫描完成,将基准数与3交换,此时基准数6的位置已经确定了。
在这之后,分别考虑6左边的序列3,1,2,5,4和其右边的序列9,7,10,8即可。(使用递归)
代码实现:
public static void quicksort(int left,int right){ int pivot = a[left];//基准数 int i = left,j = right; int temp; if(i>=j){//只有一个元素做比较时 return; } while(i!=j){ //要先从右边开始,找小于pivot的数 while(i<j&&a[j]>=pivot){ j--; } //再找左边大于pivot的数 while(i<j&&a[i]<=pivot){ i++; } //交换 if(i<j){ temp = a[i]; a[i] = a[j]; a[j] = temp; } } //此时i,j相遇(i=j),则将基准与a[i]交换 a[left] = a[i]; a[i] = pivot; //使用递归,分别处理当前基准的左右两边 quicksort(left,i-1); quicksort(i+1,right); }
3、 选择排序
在需要排序的序列中选出最小的元素,然后与第一个元素交换,接着在剩下的元素中选出最小的与第二个元素交换,以此类推。
代码实现:
public void selectSort(){ int position = 0,temp = 0; for (int i = 0; i < a.length; i++) { temp = a[i]; position = i;//当前最小元素下标 for (int j = i+1 ; j < a.length; j++) { if(a[j]<temp){ temp = a[j]; position = j; } } a[position] = a[i]; a[i] = temp; } }
0 0
- 常用排序(冒泡、快速、选择)
- 常用的排序 冒泡 ,选择,插入,快速
- 常用排序算法(包括:选择排序,堆排序,冒泡排序,选择排序,快速排序,归并排序)
- 【数据结构】常用比较排序算法(包括:选择排序,堆排序,冒泡排序,选择排序,快速排序,归并排序)
- 黑马程序员----Java中几种常用排序算法(选择排序、冒泡排序、快速排序)
- java常用的几种排序(冒泡排序 选择 插入排序 /快速排序)
- 快速,冒泡,选择排序
- 冒泡,选择,快速排序
- 选择,冒泡,快速排序
- 冒泡,选择,快速排序
- 冒泡、选择、快速排序
- 几种常用的排序算法(快速排序,希尔排序,堆排序,选择排序,冒泡排序)
- 排序-冒泡,快速(选择排序)
- 排序总结(冒泡、选择、插入、快速)
- 8086汇编排序(冒泡、选择、快速)
- 排序(冒泡、选择、插入、快速)
- 排序算法(冒泡、选择、插入、快速)
- 算法排序(冒泡、选择、插入、快速)
- SQL Server 2008 : Invoke or BeginInvoke cannot be called on a control until the window handle has ..
- A*寻路算法
- dl dt dd 标签的用法(二)
- 第一次课设完成后的闲谈——学生宿舍管理系统
- LeetCode : Regular Expression Matching [java]
- 常用排序(冒泡、快速、选择)
- ViewPager
- 蓝桥杯 历届试题 循环节长度
- performSelectorOnMainThread:withObject: waitUntilDone 参数解释
- 使用TouchDelegate增大控件的触摸范围
- POJ2096
- 杭电1316
- js 省市级联
- POJ 3728:The merchant LCA