专栏名称: 算法爱好者
算法是程序员的内功!伯乐在线旗下账号「算法爱好者」专注分享算法相关文章、工具资源和算法题,帮程序员修炼内功。
目录
相关文章推荐
算法与数学之美  ·  李斌个人能力到底有多恐怖? ·  5 小时前  
算法与数学之美  ·  知名大学原校长,任副省长! ·  5 小时前  
算法与数学之美  ·  真正的高手都是贝叶斯主义者 ·  5 小时前  
九章算法  ·  「九点热评」印度人集体撤离美国! ·  20 小时前  
算法与数据结构  ·  微软重磅开源 Copilot!64 岁 ... ·  昨天  
51好读  ›  专栏  ›  算法爱好者

图解排序算法(1):3 种简单排序

算法爱好者  · 公众号  · 算法  · 2017-10-24 20:07

正文

请到「今天看啥」查看全文


* @param arr

* @param a

* @param b

*/

public static void swap(int []arr,int a,int b){

arr[a] = arr[a]+arr[b];

arr[b] = arr[a]-arr[b];

arr[a] = arr[a]-arr[b];

}


简单选择排序


简单选择排序是最简单直观的一种算法,基本思想为每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止,简单选择排序是不稳定排序。


在算法实现时,每一趟确定最小元素的时候会通过不断地比较交换来使得首位置为当前最小,交换是个比较耗时的操作。其实我们很容易发现,在还未完全确定当前最小元素之前,这些交换都是无意义的。我们可以通过设置一个变量min,每一次比较仅存储较小元素的数组下标,当轮循环结束之后,那这个变量存储的就是当前最小元素的下标,此时再执行交换操作即可。代码实现很简单,一起来看下。


/**

* 简单选择排序

*

* @param arr

*/

public static void selectSort(int[] arr) {

for (int i = 0; i < arr.length - 1; i++) {

/* 每一趟循环比较时,min用于存放较小元素的数组下标,

这样当前批次比较完毕最终存放的就是 此趟内最小的元

素的下标,避免每次遇到较小元素都要进行交换。

*/

int min = i;

for (int j = i + 1; j < arr.length; j++) {

if (arr[j] < arr[min]) {

min = j;

}







请到「今天看啥」查看全文