文章目录

  • 选择排序
  • 冒泡排序
  • 插入排序
  • 二分
    • 二分查找某个数是否存在
    • 在arr上,找满足大于等于value的最左位置
    • 在arr上,找满足小于等于value的最右位置
    • 局部最小值
  • 异或

选择排序

public class Code01_SelectionSort {public static void selectionSort(int[] arr) {if (arr == null || arr.length < 2) {return;}// 0 ~ N-1  找到最小值,在哪,放到0位置上// 1 ~ n-1  找到最小值,在哪,放到1 位置上// 2 ~ n-1  找到最小值,在哪,放到2 位置上for (int i = 0; i < arr.length - 1; i++) {int minIndex = i;for (int j = i + 1; j < arr.length; j++) { // i ~ N-1 上找最小值的下标 minIndex = arr[j] < arr[minIndex] ? j : minIndex;}swap(arr, i, minIndex);}}public static void swap(int[] arr, int i, int j) {int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}
}

冒泡排序

public class Code02_BubbleSort {public static void bubbleSort(int[] arr) {if (arr == null || arr.length < 2) {return;}// 0 ~ N-1// 0 ~ N-2// 0 ~ N-3for (int e = arr.length - 1; e > 0; e--) { // 0 ~ efor (int i = 0; i < e; i++) {if (arr[i] > arr[i + 1]) {swap(arr, i, i + 1);}}}}// 交换arr的i和j位置上的值public static void swap(int[] arr, int i, int j) {arr[i] = arr[i] ^ arr[j];arr[j] = arr[i] ^ arr[j];arr[i] = arr[i] ^ arr[j];}
}

插入排序

public class Code03_InsertionSort {public static void insertionSort(int[] arr) {if (arr == null || arr.length < 2) {return;}// 不只1个数for (int i = 1; i < arr.length; i++) { // 0 ~ i 做到有序for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {swap(arr, j, j + 1);}}}// i和j是一个位置的话,会出错public static void swap(int[] arr, int i, int j) {arr[i] = arr[i] ^ arr[j];arr[j] = arr[i] ^ arr[j];arr[i] = arr[i] ^ arr[j];}
}

二分

二分查找某个数是否存在

public class Code04_BSExist {public static boolean exist(int[] sortedArr, int num) {if (sortedArr == null || sortedArr.length == 0) {return false;}int L = 0;int R = sortedArr.length - 1;int mid = 0;// L..Rwhile (L < R) { // L..R 至少两个数的时候mid = L + ((R - L) >> 1);if (sortedArr[mid] == num) {return true;} else if (sortedArr[mid] > num) {R = mid - 1;} else {L = mid + 1;}}return sortedArr[L] == num;}
}

在arr上,找满足大于等于value的最左位置

public class Code05_BSNearLeft {public static int nearestIndex(int[] arr, int value) {int L = 0;int R = arr.length - 1;int index = -1; // 记录最左的对号while (L <= R) { // 至少一个数的时候int mid = L + ((R - L) >> 1);if (arr[mid] >= value) {index = mid;R = mid - 1;} else {L = mid + 1;}}return index;}
}

在arr上,找满足小于等于value的最右位置

public class Code05_BSNearRight {public static int nearestIndex(int[] arr, int value) {int L = 0;int R = arr.length - 1;int index = -1; // 记录最右的对号while (L <= R) {int mid = L + ((R - L) >> 1);if (arr[mid] <= value) {index = mid;L = mid + 1;} else {R = mid - 1;}}return index;}
}

局部最小值

arr 无序,任意俩个相邻位置不等,返回一个局部最小的位置

public class Code06_BSAwesome {public static int getLessIndex(int[] arr) {if (arr == null || arr.length == 0) {return -1;}if (arr.length == 1 || arr[0] < arr[1]) {return 0;}if (arr[arr.length - 1] < arr[arr.length - 2]) {return arr.length - 1;}int left = 1;int right = arr.length - 2;int mid = 0;while (left < right) {mid = (left + right) / 2;if (arr[mid] > arr[mid - 1]) {right = mid - 1;} else if (arr[mid] > arr[mid + 1]) {left = mid + 1;} else {return mid;}}return left;}
}

异或

异或(无进位相加, 相同为0,不同为1)
同或(无进位相加, 相同为1,不同为0)

arr中,只有一种数,出现奇数次,找出并打印
arr中,有两种数,出现奇数次,找出并打印

public class Code07_EvenTimesOddTimes {// arr中,只有一种数,出现奇数次public static void printOddTimesNum1(int[] arr) {int eor = 0;for (int i = 0; i < arr.length; i++) {eor ^= arr[i];}System.out.println(eor);}// arr中,有两种数,出现奇数次public static void printOddTimesNum2(int[] arr) {int eor = 0;for (int i = 0; i < arr.length; i++) {eor ^= arr[i];}// a 和 b是两种数// eor != 0// eor最右侧的1,提取出来// eor :     00110010110111000// rightOne :00000000000001000int rightOne = eor & (-eor); // 提取出最右的1int onlyOne = 0; // eor'for (int i = 0 ; i < arr.length;i++) {//  arr[1] =  111100011110000// rightOne=  000000000010000if ((arr[i] & rightOne) != 0) {onlyOne ^= arr[i];}}System.out.println(onlyOne + " " + (eor ^ onlyOne));}
}

(选择 冒泡 插入 二分 异或)相关推荐

  1. MATLAB实现三种基本排序(选择+冒泡+插入)

    选择排序 %% 选择排序 A=[2 4 6 7 1 9 5 3 8]; num_A=length(A);% A的长度 for i=1:num_A-1now =i;for j=i+1:num_Aif A ...

  2. 面试必备:冒泡,选择,插入,希尔,归并,快速排序大合集

    目录 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 在很多大厂的面试中,算法是最基本的要求,像基础的算法,冒泡,选择,插入等,基本上都会问到. 很多同学往往忽略了其重要程度,只注重编程语 ...

  3. 常用排序算法的c++实现(冒泡,选择,插入,堆,shell,快速,归并 )与sort()对比 - coder_xia的专栏 - 博客频道 - CSDN.NET...

    常用排序算法的c++实现(冒泡,选择,插入,堆,shell,快速,归并 )与sort()对比 - coder_xia的专栏 - 博客频道 - CSDN.NET 常用排序算法的c++实现(冒泡,选择,插 ...

  4. 四种排序:选择,插入,冒泡,快速排序原理及其对应的时间、空间复杂度解析

    四种排序:选择,插入,冒泡,快速排序原理及其对应的时间空间复杂度 首先,在了解四种排序之前,让我们来了解一下什么是时间复杂度和空间复杂度. 时间复杂度:算法的时间复杂度是一个函数,它定性描述该算法的运 ...

  5. Java五大排序(冒泡,选择,插入,快速,归并)

    冒泡,选择,插入,快速,归并这五个排序应该是所有编程语言初学者所遇到过的,可能在实际的编程应用中不会遇到,但对于初学者而言能起到锻炼编程思维的作用.废话不多说,下面进入正题. 冒泡排序 冒泡排序的就是 ...

  6. 选择、插入、冒泡排序

    选择.插入.冒泡三种算是最典型的排序算法了,空间复杂度都为O(1) 选择排序时间复杂度跟初始数据顺序无关,O(n2),而且还不稳定; 插入排序时间复杂度跟初始数据顺序有关最好O(n),最坏O(n2), ...

  7. 挑战程序设计竞赛部分题目选择排序、二分查找找出下标、深度优先算法、求三角形max周长、蚂蚁算法、操作excel

    首先提供帮助类 可能这个类还需要更新 .求最大值.求最小值.选择排序.二分查找找出下标.二分查找排好序列里面是否有那个值 public class Util {//求最大值public static ...

  8. 用vs编写html后sel,选择后插入HTML

    以下函数将在所有主流浏览器的选择结尾处插入DOM节点(元素或文本节点)(请注意,Firefox现在默认允许多个选择;以下仅使用第一个选择): function insertNodeAfterSelec ...

  9. Python 关于下标的运用技巧(二分查找法,冒泡、选择、插入、归并、快速排序算法)

    二分查找法(折半查找法)的递归实现 二分查找法(折半查找法):用于预排序列表的查找问题, 再次强调,二分查找法要配合排序使用,只有排好序,才能使用二分查找法 而且,待查找列表如果有重复值,只能查找到其 ...

最新文章

  1. 设计模式之命令模式(Command)摘录
  2. 四面体的表面积_JACS:武汉大学汪成课题组利用从平面至四面体的扭曲单体来合成COFs材料...
  3. 错误处理笔记 导入 torch.utils.tensorboard时 找不到tensorboard
  4. Windows下安装Cygwin配置Hadoop集群
  5. pandas切割字符串并保存为新列
  6. java生成json字符串,真香
  7. 已超过了锁请求超时时段_分布式锁:效率与正确性的衡权
  8. python面向对象的特殊方法和单例模式
  9. Java基础IO流(二)字节流小案例
  10. 对中国大学MOOC课程视频批量下载的探索
  11. java poi excel转pdf_java_poi导入导出excel.pdf
  12. 使用html表单制作简单网页(加表单详细知识点)
  13. [转]再分析资料整理
  14. 程序员真的需要一台 Mac 吗?
  15. VMware workstation安装虚拟机--Windows XP
  16. Java“中文”编程-java为什么可以使用中文标识符
  17. Android 动画
  18. GEE|分级统计面积
  19. 新生儿黄疸警惕蚕豆病
  20. 【STM32】#147-D: declaration is incompatible 类错误的解决方式

热门文章

  1. mysql 磁盘i o 优化_经典案例:磁盘I/O巨高排查全过程
  2. matlab如何使用cu文件,Matlab编译cuda的.cu文件
  3. JVM(1)——JVM内存分区
  4. Trie:hdu 4825、1251、1247、Poj 3764
  5. Educational Codeforces Round 80 (Rated for Div. 2) E. Messenger Simulator 思维 + 树状数组
  6. 2016中国大学生程序设计竞赛(长春)Sequence II HDU - 5919 主席树
  7. Codeforces Round #601 (Div. 2) E2. Send Boxes to Alice (Hard Version) 思维 + 质因子
  8. CF1043E Train Hard, Win Easy
  9. 【每日一题】8月25日题目精讲 XOR-pyramid
  10. 牛客网 【每日一题】5月13日 加分二叉树