数组排序----Demo
//选择排序,分为简单选择排序、树形选择排序(锦标赛排序)、堆排序 此算法为简单选择排序
public static void selectSort(int[] a){
for(int i=0;i<a.length;i++){
int minIndex = i;
for (int j = i + 1; j < a.length; j++) {
if (a[j] < a[minIndex]) {
minIndex = j;
}
}
if (minIndex != i) {
int temp = a[minIndex];
a[minIndex] = a[i];
a[i] = temp;
}
}
}
package com.test; public class Sort {
//打印数组
public static void displayData(int[] data){
for(int d:data){ System.out.println(d+""); } System.out.println(); }
//冒泡排序算法,时间复杂度O(n2),算法具有稳定性,堆排序和快速排序算法不具有稳定性,即排序后相同元素的顺序会发生变化
public static void bubbleSort(int[] src){ if(src.length>0){ int length=src.length; for(int i=1;i<length;i++){ for(int j=0;j<length-i;j++){ if(src[j]>src[j+1]){ int temp=src[j]; src[j]=src[j+1]; src[j+1]=temp; } } } } }
//快速排序,时间复杂度O(nlogn),最坏时间复杂度O(n2),平均时间复杂度O(nlogn),算法不具稳定性
public static void quickSort(int[] src,int begin,int end){ if(begin<end){ int key=src[begin]; int i=begin; int j=end; while(i<j){ while(i<j && src[j]>key){ j--; }if(i<j){ src[i]=src[j]; i++; }while(i<j && src[i]<key){ i++; }if(i<j){ src[j]=src[i]; j--; } } src[i]=src[key]; quickSort(src, begin, i-1); quickSort(src, i+1, end); } } }
package com.test; import java.util.Arrays; public class Test { public static void compare(int []a) { for(int i=0;i<a.length-1;i++)
//外层循环控制比较轮数,从a[0]到a[a.length-2],最后一个数不用比较 { for(int j=i+1;j<a.length;j++)
//内层循环是要比较的数,总是在a[i]的后面,所以从i+1的位置开始,一直到最后一个数 { if(a[i]>a[j])
//如果大于进行交换 { int t=a[i]; a[i]=a[j]; a[j]=t; } } } } public static void main(String[] args) { int[] a={3,6,2,1,88,44,99,4,32}; compare(a); System.out.println(Arrays.toString(a)); } }
package com.test;
import java.util.Arrays;
public class MergeSort {
//归并排序,将两个(或两个以上)有序表合并成一个新的有序表 即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列
public static int[] sort(int[]nums,int low,int high){
int mid=(low+high)/2;
if(low<high){
sort(nums,low,mid);//左边
sort(nums,mid+1,high);//右边
merge(nums,low,mid,high);//左右合并
}
return nums;
}
public static void merge(int[] nums,int low,int mid,int high){
int[] temp=new int[high-low+1];
int i=low;//左指针
int j=mid+1;//右指针
int k=0;
// 把较小的数先移到新数组中
while(i<=mid && j<=high){
if(nums[i]<nums[j]){
temp[k++]=nums[i++];
}else{
temp[k++]=nums[j++];
}
}
// 把左边剩余的数移入数组
while(i<=mid){
temp[k++]=nums[i++];
}
// 把右边剩余的数移入数组
while(j<=high){
temp[k++]=nums[j++];
}
// 把新数组中的数覆盖nums数组
for(int k2=0;k2<temp.length;k2++){
nums[k2+low]=temp[k2];
}
}
public static void main(String[] args) {
int[] nums={45,98,9,3,6};
MergeSort.sort(nums, 0, nums.length-1);
System.out.println(Arrays.toString(nums));
}
}
数组排序----Demo的更多相关文章
- Arrays.sort()
今天在做一个按更新时间搜寻出某个目录里面的全部文件,因为自己写算法比較花费时间,干脆就用j2se提供的类Arrays提供的sort()方法,这样就比較省力.对于基本数据类型仅仅要Arrays.sort ...
- NDK开发—基础知识实战Demo
简介 前面写了几篇NDK相关的文章: NDK开发-简介&环境搭建(Eclipse,Android Studio) NDK开发-Android Studio+gradle-experimenta ...
- 数组排序,字符串math,replace练习
1. 关于数组排序 排序一直是程序设计中的热门话题.在js中,数组有个sort()方法.在不传参数默认情况下,数组的sort()方法原理是:对数每项调用toString()方法,比较字符串按升 ...
- JDK8-十大新特性-附demo
JDK原计划17年上半年就发版,但未成功发版.才发现JDK8的特性还没总结过,特此总结. 一.十大特性. 1.Lambda表达式 2.Stream函数式操作流元素集合 3.接口新增:默认方法与静态方法 ...
- 一个demo学会js
全栈工程师开发手册 (作者:栾鹏) 快捷链接: js系列教程1-数组操作全解 js系列教程2-对象和属性全解 js系列教程3-字符串和正则全解 js系列教程4-函数与参数全解 js系列教程5-容器和算 ...
- [置顶]
一个demo学会c#
学习了c#4.5高级编程这本书,自己喜欢边学边总结边写demo,所以写了这篇文章,包含了大部分的c#编程知识.让你一个demo掌握c#编程,如果有问题可以留言. 此demo主要包括五个文件:Stude ...
- jdk8十大特性并代码demo(转)
一.十大特性 1.Lambda表达式 2.Stream函数式操作流元素集合 3.接口新增:默认方法与静态方法 4.方法引用,与Lambda表达式联合使用 5.引入重复注解 6.类型注解 7.最新的Da ...
- ASP版_阿里大于短信API Demo
阿里大于申请地址:http://www.alidayu.com 阿里大于短信发送Demo: ******index.asp************* <%@LANGUAGE="VBSC ...
- Object-C,NSArraySortTest,数组排序3种方式
晚上回来,继续写Object-C的例子,今天不打算写iOS可视化界面的程序,太累了. 刚刚dady又电话过来,老一套,烦死了. 其实,我一直一个观点,无论发生什么事情,不要整天一副不开心的样子. 开开 ...
随机推荐
- 我的Android进阶之旅------>介绍一款集录制与剪辑为一体的屏幕GIF 动画制作工具 GifCam
由于上一篇文章:我的Android进阶之旅------>Android之动画之Frame Animation实例 中展示的是Frame动画效果,但是之前我是将图片截取下来,不好说明确切的动画过程 ...
- python cookbook第三版学习笔记十七:委托属性
我们想在访问实例的属性时能够将其委托到一个内部持有的对象上,这经常用到代理机制上 class A: def spam(self,x): print("class_A: ...
- Java 线程的终止-interrupt
Java线程的终止——interrupt 取消/关闭的场景 我们知道,通过线程的start方法启动一个线程后,线程开始执行run方法,run方法运行结束后线程退出,那为什么还需要结束一个线程呢?有多种 ...
- ip地址设备信息
其实是个小问题,在项目中遇到要获取手机ip地址和mac地址的问题,mac地址获取用appcan的uexDevice插件可以实现. 但是ip地址,获取的方式很多,具体有搜狐/腾讯/新浪等提供的接口.但是 ...
- mysql练习(待补充)
2.查询‘生物’课程比‘物理’课程成绩高的所有学生的学号 思路: 获取所有生物课程的人(学号,成绩)-临时表 获取所有物理课程的人(学号,成绩)-临时表 根据学号连接两个临时表: 学号 生物成绩 物理 ...
- codeforces 60B bfs
题意:给出一个六面体分为k层,每层n行m列,每个小立方体有'.'(空)与'#'(障碍)的状态,第一层某个空的位置有一个水龙头,水流每次往六个方向流动(...).最少时间水流能把立方体空的部分填满. 思 ...
- [Vue] 初识Vue-常用指令
Vue Vue是一套用于构建用户界面的渐进式框架, Vue的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合.Vue是一个JavaScript MVVM库, 以数据驱动和组件化的思想构 ...
- HDU 4417 Super Mario(2012杭州网络赛 H 离线线段树)
突然想到的节约时间的方法,感觉6翻了 给你n个数字,接着m个询问.每次问你一段区间内不大于某个数字(不一定是给你的数字)的个数 直接线段树没法做,因为每次给你的数字不一样,父节点无法统计.但是离线一 ...
- LUA学习之一 初次接触
对于一个开源工程,开始学习它的第一步自然是编译工程. 使用vc编译lua,在网上已有许多介绍,但“纸上得来终觉浅”,自己走一遍还是有必要的. 步骤如下: 1.下载源代码,从lua.org下载最新源代码 ...
- 在windows下进行linux开发:利用Vagrant+virtualbox
1,介绍Vagrant 我们做web开发的时候经常要安装各种本地测试环境,比如apache,php,mysql,redis等等.出于个人使用习惯,可能我们还是比较习惯用windows.虽然说在wind ...