排序算法

简单排序算法

冒泡排序

  • 两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止

直接插入排序

  • 通过 n-i 次关键字间的比较,从 n-i+1 个记录中选出关键字最小的记录,并和第 i 个记录交换

简单选择排序

改进算法

快速排序(冒泡排序的改进)

  • 先随机选择一个记录,比它大的放在右边,比它小的放在左边,采用递归的方式进行排序
  • java 代码
/**
* 快排,先找一个记录,把大于他的放在右边,小的放在左边,然后采用递归的方式进行排序
*/
public class QuickSort2 { public void quickSort(int[] array) {
if (array.length > 0) {
doQuickSort(array, 0, array.length - 1);
}
} private void doQuickSort(int[] array, int left, int right) {
if (left >= right) {
return;
}
int low = left;
int high = right;
int temp = array[low];
while (low != high) {
while (low < high && array[high] > temp) {
high--;
}
array[low] = array[high];
while (low < high && array[low] < temp) {
low++;
}
array[high] = array[low];
}
array[high] = temp;
Utils.printArray(array);
doQuickSort(array, left, low - 1);
doQuickSort(array, high + 1, right);
} public static void main(String[] args) {
QuickSort2 qs = new QuickSort2();
int[] a = {9, 1, 5, 8, 3, 7, 4, 6, 2};
qs.quickSort(a);
}
}
  • 测试结果
2 1 5 8 3 7 4 6 9 -
1 2 5 8 3 7 4 6 9 -
1 2 4 3 5 7 8 6 9 -
1 2 3 4 5 7 8 6 9 -
1 2 3 4 5 6 7 8 9 -

希尔排序

堆排序

归并排序

查找算法

  • 二分查找

常见数据结构题目

  • 翻转链表

    • 通过栈实现翻转
    public static void reverseNode(Node head) {
Stack<Node> stack = new Stack<>();
while (head != null) {
stack.push(head);
head = head.next;
}
while (!stack.isEmpty()) {
System.out.println(stack.pop().data + "");
}
}
- 通过Arraylist,然后倒叙输出
    public static void reverseNodeByArrayList(Node head) {
ArrayList<Node> list = new ArrayList<>();
while (head != null) {
list.add(head);
head = head.next;
}
for (int i = list.size()-1 ; i >= 0; i--) {
System.out.println(list.get(i).data);
}
}
  • 两个栈实现一个队列
  • 两个队列实现一个栈
  • string 转 int
  • 合并 k 个已排序的链表
  • 给已排序的链表去重
    • 思路: 当前节点跟下一个节点的值做比较,相等的话,就把当前节点指向下一个节点的下一个节点,把下一个节点去除了,就把重复的元素去掉了。
    • Java 代码
    public static Node deleteDuplicatesNodeFromLinkedlist(Node head) {
if (head == null) {
return null;
}
Node preNode = head;
Node currentNode = head.next;
while (currentNode != null) {
if (currentNode.data == preNode.data) {
preNode.next = currentNode.next;
} else {
preNode = currentNode;
}
currentNode = preNode.next;
}
return head;
}

参考:https://www.jianshu.com/p/ae97c3ceea8d

Android 常用算法的更多相关文章

  1. Android常用开源项目

    Android开源项目第一篇——个性化控件(View)篇   包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.Progre ...

  2. Android常用酷炫控件(开源项目)github地址汇总

    转载一个很牛逼的控件收集帖... 第一部分 个性化控件(View) 主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Gallery.Gri ...

  3. Android 常用炫酷控件(开源项目)git地址汇总

    第一部分 个性化控件(View) 主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.P ...

  4. Android 常用开发工具以及Mac常用软件

    Android 常用的开发工具记录.其中包括AndroidStudio(IDEA)插件.Mac 上好用的软件以及国内知名Android开发者博客等. Android Studio 插件 codota ...

  5. 总结Objective-c常用算法

          今天是星期天,想睡到10点起床,结果认为自己太奢侈了,不能这么做,于是把闹钟设置成了6:30:结果终于9:36醒了,起床,无缘无故迟了,好吧,就算太累了吧,周天就原谅自己一回.终于到了中午 ...

  6. Atitit 编程语言常用算法attilax总结

    Atitit 编程语言常用算法attilax总结 1. 编译算法分类and   数据操作算法.1 1.1. Tab driver stat  状态转换表格算法1 1.2. Nest case 词法分析 ...

  7. GJM : 数据结构 - 轻松看懂机器学习十大常用算法 [转载]

     转载请联系原文作者 需要获得授权,非法转载 原文作者将享受侵权诉讼 文/不会停的蜗牛(简书作者)原文链接:http://www.jianshu.com/p/55a67c12d3e9 通过本篇文章可以 ...

  8. Android 常用数据适配器SimpleAdapter

    在<Android 常用数据适配器ArrayAdapter>中介绍了ArrayAdapter数据适配器.但是存在一个缺陷,那就是条目的图标都固定相同,要显示每个条目的图标都不相同,那么使用 ...

  9. Android常用设计模式(二)

    Android常用设计模式之观察者模式 观察者设计模式在Android应用中会经常用到,模式原理类似于这样的场景: 用户订报纸,然后在报社登记,报社来统计用户(添加用户),用户也可以取消订阅,报社删除 ...

随机推荐

  1. cocos2d-js 3.0 RC0 监听返回键、菜单键、进入后台(home键)、恢复显示等事件

    cc.eventManager.addListener({ event: cc.EventListener.KEYBOARD, onKeyReleased: function(keyCode, eve ...

  2. 【shell】数据文件分割

    有时候我们必须把数据文件分割为更小的文件,这样方便我们邮件发送或者查看文件内容.split命令则可以用来分割文件. 一.根据大小来分割文件 1.一般分割 例如:现在有文件tmp.log,大小为:368 ...

  3. COUNTA函数功能是返回参数列表中非空值的单元格个数

    COUNTA:返回参数列表中非空值的单元格个数

  4. 用python导出csv文件

    # coding: utf-8 import csv csvfile = open('csv.csv', 'wb') #打开方式还可以使用file对象 writer = csv.writer(csvf ...

  5. mybatis-generator生成逆向工程两种方式

    本文博客地址:http://blog.csdn.net/soonfly/article/details/64499423 逆向工程下载 链接:https://pan.baidu.com/s/1YOAq ...

  6. Spring Boot动态修改日志级别

    1. pom中引入 org.springframework.boot       spring-boot-starter-actuator 2. 发送POST请求: 地址: http://[服务地址] ...

  7. YAML格式的语法

    基本格式 用空格缩进, 不能用tab 用#标记注释 列表: 用短划(-)标记元素 映射: 用冒号(:)分隔key, value. 如果写在一行, 需要用逗号分隔并前后加花括号 字符串: 不加引号, 加 ...

  8. 【TP3.2+onethink】radio+checkbox+select 空间 编辑页面选中,附录 js 返回上一页

    1.TP3.2框架 如何实现 [radio+checkbox+select 空间 编辑页面选中],说实话,比较繁琐,不咋地!! 不废话,上代码:(其中 XX_arr  变量一维数组) <div ...

  9. 1A2B猜数字

    知乎链接 维基百科 问题描述 又名猜数字. 一方准备从0到9十个数字里抽出4个数,随机排列,另一方同样以这样的方法回应四个数.位置相同数字相同为A,数字出现,位置不同为B,然后计数. 例1234 56 ...

  10. 【CI】CN.一种多尺度协同变异的微粒群优化算法

    [论文标题]一种多尺度协同变异的微粒群优化算法 (2010) [论文作者]陶新民,刘福荣, 刘  玉 , 童智靖 [论文链接]Paper(14-pages // Single column) [摘要] ...