常见的排序算法(直接插入&选择排序&二分查找排序)
1、直接插入排序算法

源码:
package com.DiYiZhang;
/* 插入排序算法
* 如下进行的是插入,排序算法*/
public class InsertionSort {
public static void insertionSort(int[] a) {
int tmp;
for (int i = 1; i < a.length; i++) {
for (int j = i; j >0; j--) {
if (a[j] < a[j-1]) {
tmp = a[j-1];
a[j-1] = a[j];
a[j] = tmp;
}
}
// for(int j=i+1;j<a.length;j++){
// if(a[j]>a[j+1]){
// tmp=a[j+1];
// a[j+1]=a[j];
// a[j]=tmp;
// }
// }
}
}
public static void main(String[] args) {
int[] a = { 49, 38, 65, 97, 76, 13, 27, 50 };
insertionSort(a);
for (int i : a)
System.out.print(i + " ");
}
}
2、二分查找排序算法

源码:
package com.DiYiZhang;
import java.security.*;
import java.awt.dnd.*;
import java.awt.*;
import java.net.*;
import java.sql.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Arrays;
import java.util.Scanner;
/* 本程序用来将乱序的一组数字先按照二分查找的方式进行排序*/
public class MergeSort {
public static void main(String[] args) {
// Scanner reader=new Scanner(System.in);
// reader.hasNextLine();
int []a ={564,378,954,1255,684,57,15,389,687,45,98,125,348};
new MergeSort().MergeSort(a,0,a.length-1);
for(int i:a) {
System.out.print(i+" ");
}
}
public void MergeSort(int []a,int low,int high) {
int mid=0;
while(low<high) {
mid=low+(high-low)/2;
MergeSort(a,low,mid);
MergeSort(a,mid+1,high);
Merge(a,low,mid,high);
return;
}
}
private void Merge(int[] a, int low, int mid, int high) {
// TODO Auto-generated method stub
int i=low,j=mid+1,k=0;
int []b = new int[high-low+1];
while(i<=mid&&j<=high) {
if(a[i]<=a[j]) {
b[k++]=a[i++];
}else {
b[k++]=a[j++];
}
}
while(i<=mid) {
b[k++]=a[i++];
}
while(j<=high) {
b[k++]=a[j++];
}
for(int x=0,m=low;m<=high;m++) {
a[m]=b[x++];
}
}
}
3、直接排序算法

源码:
package com.DiYiZhang;
import java.util.Arrays;
public class SelectSort {
public static void selectSort(int[] a) {
if (a == null || a.length <= 0) {
return;
}
for (int i = 0; i < a.length; i++) {
//// int temp = a[i];
// int temp=i;
int flag = i; // 将当前下标定义为最小值下标
for (int j = i + 1; j < a.length; j++) {
if (a[j] < a[flag]) {// a[j] < temp 从小到大排序;a[j] > temp 从大到小排序
// temp = a[j];
flag = j; // 如果有小于当前最小值的关键字将此关键字的下标赋值给flag
}
}
if (flag != i) {
int temp=a[i];
a[i]=a[flag];
a[flag] = temp;
// a[i] = temp;
}
}
}
public static void main(String[] args) {
int a[] = { 49,38,65,97,76,13,27,49 };
System.out.println("交换之前的排序列表");
for(int i:a){
System.out.print(i+" ");
}
selectSort(a);
System.out.println("交换之后的排序列表");
System.out.println(Arrays.toString(a));
}
}
//class A{
// int sys(int a){
// int w=a;
// return w;
// }
//}
//public class InsertionSort{
// public static void insrtionSort(int []a){
// int tmp;
// for(int i=1;i<a.length;i++){
// for(int j=i;j>0;j--){
// if(a[j]<a[j-1]){
// tmp=a[j-1];
// a[j-1]=a[j];
// a[j]=tmp;
// }
// }
// }
// }
// public static void main(String [] args){
// int[]a={23,34,2,45,3,24,54,33};
// for(int i:a){
// System.out.println(i+" ");
// }
// }
//}
4、背包问题
- public class sf {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- int[] weight = {3,5,2,6,4}; //物品重量
- int[] val = {4,4,3,5,3}; //物品价值
- int m = 12; //背包容量
- int n = val.length; //物品个数
- int[][] f = new int[n+1][m+1]; //f[i][j]表示前i个物品能装入容量为j的背包中的最大价值
- int[][] path = new int[n+1][m+1];
- //初始化第一列和第一行
- for(int i=0;i<f.length;i++){
- f[i][0] = 0;
- }
- for(int i=0;i<f[0].length;i++){
- f[0][i] = 0;
- }
- //通过公式迭代计算
- for(int i=1;i<f.length;i++){
- for(int j=1;j<f[0].length;j++){
- if(weight[i-1]>j)
- f[i][j] = f[i-1][j];
- else{
- if(f[i-1][j]<f[i-1][j-weight[i-1]]+val[i-1]){
- f[i][j] = f[i-1][j-weight[i-1]]+val[i-1];
- path[i][j] = 1;
- }else{
- f[i][j] = f[i-1][j];
- }
- //f[i][j] = Math.max(f[i-1][j], f[i-1][j-weight[i-1]]+val[i-1]);
- }
- }
- }
- for(int i=0;i<f.length;i++){
- for(int j=0;j<f[0].length;j++){
- System.out.print(f[i][j]+" ");
- }
- System.out.println();
- }
- int i=f.length-1;
- int j=f[0].length-1;
- while(i>0&&j>0){
- if(path[i][j] == 1){
- System.out.print("第"+i+"个物品装入 ");
- j -= weight[i-1];
- }
- i--;
- }
- }
- }
常见的排序算法(直接插入&选择排序&二分查找排序)的更多相关文章
- Python排序算法之选择排序定义与用法示例
Python排序算法之选择排序定义与用法示例 这篇文章主要介绍了Python排序算法之选择排序定义与用法,简单描述了选择排序的功能.原理,并结合实例形式分析了Python定义与使用选择排序的相关操作技 ...
- 八大排序算法~简单选择排序【记录下标k变量的作用】
八大排序算法~简单选择排序[记录下标k变量的作用] 1,思想:打擂台法,数组中的前n-1个元素依次上擂台"装嫩",后边的元素一个挨着一个不服,一个一个上去换掉它 2,优化:通过记录 ...
- java排序算法(十):桶式排序
java排序算法(十):桶式排序 桶式排序不再是一种基于比较的排序方法,它是一种比较巧妙的排序方式,但这种排序方式需要待排序的序列满足以下两个特征: 待排序列所有的值处于一个可枚举的范围之类: 待排序 ...
- java排序算法(八):希尔排序(shell排序)
java排序算法(八):希尔排序(shell排序) 希尔排序(缩小增量法)属于插入类排序,由shell提出,希尔排序对直接插入排序进行了简单的改进,它通过加大插入排序中元素之间的间隔,并在这些有间隔的 ...
- javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法)
javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法) 一.快速排序算法 /* * 这个函数首先检查数组的长度是否为0.如果是,那么这个数组就不需要任何排序,函数直接返回. * ...
- 七内部排序算法汇总(插入排序、Shell排序、冒泡排序、请选择类别、、高速分拣合并排序、堆排序)
写在前面: 排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素的随意序列,又一次排列成一个按keyword有序的序列.因此排序掌握各种排序算法很重要. 对以下介绍的各个排序,我们假定全部排 ...
- 排序算法总结------选择排序 ---javascript描述
每当面试时避不可少谈论的话题是排序算法,上次面试时被问到写排序算法,然后脑袋一懵不会写,狠狠的被面试官鄙视了一番,问我是不是第一次参加面试,怎么可以连排序算法都不会呢?不过当时确实是第一次去面试,以此 ...
- 第四篇、C_快速、冒泡、选择、插入排序、二分查找排序、归并、堆排序
1.快速排序 实现: 1.取中间一个数作为支点 2.分别在支点的左右两边进行查找,如果左边查找到比支点大,右边查找到比支点小,就交换位置,如此循环,比支点小的数就排在了左边,比支点大的就排在右边 3. ...
- 常用排序算法之——选择排序(C语言+VC6.0平台)
选择排序是另一种经典排序算法,核心思想是:在一趟找最小(大)数的过程中,先假设待排数据中的第一个数据即为最小(大)数据,然后循环将其他数据与该数据比较,每次比较时若小于该数据则让新数据成为最小(大)数 ...
随机推荐
- python 的基础 学习 第五天 基础数据类型的操作方法
1,列表的基本操作方法 1,列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[ ]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如: ...
- 虚拟节点操作——DocumentFragment
文章中转站: DocumentFragment对象 createDocumentFragment()用法总结 深入理解DOM节点类型第四篇——文档片段节点DocumentFragment
- 页面跳转、底部tabs切换页面
1.页面跳转 import { NavController } from 'ionic-angular'; constructor(public navCtrl: NavController) { } ...
- javascript常用函数封装——运动、cookie、ajax、获取行内样式兼容写法、拖拽
运动.cookie.ajax.获取行内样式兼容写法.拖拽封装大合集. //url,data,type,timeout,success,error function ajax(options){ //- ...
- IDEA-使用技巧
IDEA--个性化配置 - 心飞扬的博客 - CSDN博客--里面很好,http://blog.csdn.net/afzaici/article/details/71524643 IntelliJ I ...
- 论文笔记系列-Multi-Fidelity Automatic Hyper-Parameter Tuning via Transfer Series Expansion
论文: Multi-Fidelity Automatic Hyper-Parameter Tuning via Transfer Series Expansion 我们都知道实现AutoML的基本思路 ...
- xht37的码风
写在前面 众所周知,在 Dev-C++ 上有一个代码格式化的功能,快捷键Ctrl+Shift+A 我的码风致力于写出格式化后毫无变化的代码,这被认为是标准代码 同时,对不可格式化的部分(如空格),我同 ...
- 20165231 2017-2018-2 《Java程序设计》第8周学习总结
教材学习内容总结 进程与线程 程序是一段静态的代码,它是应用软件执行的蓝本. 进程是程序的一次动态执行过程,它对应了从代码加载.执行至执行完毕的一个完整过程,这个过程也是进程本身从产生.发展至消亡的过 ...
- Intel Xeon E5-2620 v4参数
基本参数 CPU系列 Xeon E5 v4系列 制作工艺 14纳米 核心代号 Broadwell 性能参数 核心数量 八核心 线程数量 十六线程 CPU主频 2.1GHz 动态加速频率 3GHz L3 ...
- python使用PDB进行调试
参考链接:https://www.cnblogs.com/xiaohai2003ly/p/8529472.html 调入包:import pdb 调试时的一些命令: (1)p 变量名:查看变量:(p ...