排序-java
今天座右铭----每天的学习会让我们不断地进步!
往往面试中都会让我们用一种排序方法做一道排序题,下面我就罗列出快速排序、冒泡排序、插入排序、选择排序的java代码!
1、快速排序
public class Quick_sort {
/** * @param args */
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr1[]={1,0,-1,9,-100,90};
QuickSort quciksort=new QuickSort();
quciksort.sort(0,arr1.length-1,arr1);
//输出最后结果
for(int i=0;i<arr1.length;i++){
System.out.print(arr1[i]+" ");
}
}
}
class QuickSort{
public void sort(int left,int right,int array[]){
int l=left;
int r=right;
int pivot=array[(left+right)/2];
int temp=0;
while(l<r){
while(array[l]<pivot) l++;
while(array[r]>pivot) r--;
if(l>=r) break;
temp=array[l];
array[l]=array[r];
array[r]=temp;
if(array[l]==pivot) --r;
if(array[r]==pivot) ++l;
}
if(l==r){
l++;
r--; }
if(left<r) sort(left,r,array);
if(right>l) sort(l,right,array);
}
}
2、冒泡排序
public class Bubble_sort {
/** * @param args */
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr1[]={1,0,-1,9,-100,90};
//创建一个Bubble类
Bubble bubble=new Bubble();
bubble.sort(arr1);
//输出最后结果
for(int i=0;i<arr1.length;i++){
System.out.print(arr1[i]+" ");
}
}
}
class Bubble{
public void sort(int arr[]){
int temp=0;
//排序
//外部排序,决定一共走几趟
for(int i=0;i<arr.length-1;i++){
//内层循环,开始逐个比较,如前一个比后一个大,则交换
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
//换位
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
}
3、插入排序
public class Insert_sort {
/** * @param args */
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr1[]={1,0,-1,9,-100,90};
Insert insert=new Insert();
insert.sort(arr1);
// System.out.println("排序后:"+cal.getTime());
//输出最后结果
for(int i=0;i<arr1.length;i++){
System.out.print(arr1[i]+" ");
}
}
}
class Insert{
//插入排序
public void sort(int arr[]){
for(int i=1;i<arr.length;i++){
int insertVal=arr[i];
//insertVal准备和前一个数比较
int index=i-1;
while(index>=0&&insertVal<arr[index]){
//将把arr[index]向后移动
arr[index+1]=arr[index];
//让index向前移动
index--;
}
//将insertVal插入到适当位置
arr[index+1]=insertVal;
}
}
}
4、选择排序
public class Select_sort {
/** * @param args */
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr1[]={1,0,-1,9,-100,90};
//创建一个Select类
Select select=new Select();
//在排序前打印系统时间
//Calendar cal=Calendar.getInstance();
//System.out.println("排序前:"+cal.getTime());
select.sort(arr1);
// System.out.println("排序后:"+cal.getTime());
//输出最后结果
for(int i=0;i<arr1.length;i++){
System.out.print(arr1[i]+" ");
}
}
}
class Select{
//选择排序
public void sort(int arr[]){
int temp=0;
for(int j=0;j<arr.length;j++){
//我默认第一个数就是最小
int min=arr[j];
//记录最小数的下标
int minIndex=j;
for(int k=j+1;k<arr.length;k++){
if(min>arr[k]){
//修改最小
min=arr[k];
minIndex=k;
}
}
//当退出for就找到最小值
temp=arr[j];
arr[j]=arr[minIndex];
arr[minIndex]=temp;
}
}
}
附:二分查找
public class BinaryFind {
/** * @param args */
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr[]={2,5,0,7,40,50};
//创建一个对象
Binary binary=new Binary();
binary.find(0,arr.length-1,7,arr);
//7是要找的数
}
}
class Binary{
public void find(int leftIndex,int rightIndex,int val,int arr[]){
//首先找到中间的数
int midIndex=(rightIndex+leftIndex)/2;
int midVal=arr[midIndex];
if(rightIndex>=leftIndex){
//如果要找的数比minVal大
if(midVal>val){
//在arr左边数找
find(leftIndex,midIndex-1,val,arr);
}else if(midVal<val){
//在右边找
find(midIndex+1,rightIndex,val,arr);
}else if(midVal==val){
System.out.println("找到下标"+midIndex);
}
}
}
}
总之排序在学习语言过程中是很重要的知识点
排序-java的更多相关文章
- 希尔排序及希尔排序java代码
原文链接:http://www.orlion.ga/193/ 由上图可看到希尔排序先约定一个间隔(图中是4),然后对0.4.8这个三个位置的数据进行插入排序,然后向右移一位对位置1.5.9进行插入排序 ...
- 算法练习5---快速排序Java版
基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成 ...
- ElasticSearch中设置排序Java
有用的链接:http://stackoverflow.com/questions/12215380/sorting-on-several-fields-in-elasticsearch 有的时候,需要 ...
- 初识指令重排序,Java 中的锁
本文是作者原创,版权归作者所有.若要转载,请注明出处.本文只贴我觉得比较重要的源码 指令重排序 Java语言规范JVM线程内部维持顺序化语义,即只要程序的最终结果与它顺序化情况的结果相等,那么指令的执 ...
- 希尔排序(java)
时间复杂度为O( n^(3/2) )不是一个稳定的排序算法 如何看一个算法是否稳定:{("scala",12),("python",34),("c++ ...
- 基本排序算法——shell排序java实现
shell排序是对插入排序的一种改进. package basic.sort; import java.util.Arrays; import java.util.Random; public cla ...
- 基本排序算法——选择排序java实现
选择排序与冒泡排序有很大的相同点,都是一次遍历结束后能确定一个元素的最终位置,其主要思路是,一次遍历选取最小的元素与第一个元素交换,从而使得一个个元素有序,而后选择第二小的元素与第二个元素交换,知道, ...
- 选择排序-java
排序-选择排序 基本思想:在待排序子表中找出最大(小)元素, 并将该元素放在子表的最前(后)面. 平均时间:O(n2) 最好情况:O(n2) 最坏情况:O(n2) 辅助空间:O(1) 稳定性:不稳定 ...
- 希尔排序java
希尔排序简述 希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率.(希尔排序先将部分数据进行排序,相当于已经部分排好序) ...
随机推荐
- Android 不通过USB数据线调试的方法
在开发Android应用时,通常情况下是通过USB数据线连接设备和计算机,但对于一些需要使用USB设备的应用,这种方法就碰到了麻烦,手机的USB接口已经和外接的USB设备连接,无法再连数据线,此时可以 ...
- Android05-UI02布局,自定义控件,ListView
1.布局 布局的内部除了放置控件外,也可以放置布局,通过多层布局的嵌套,我们就能够完成一些 比较复杂的界面实现 ¨四种基本布局 LinearLayout RelativeLayout FrameLay ...
- 转:JavaScript函数式编程(一)
转:JavaScript函数式编程(一) 一.引言 说到函数式编程,大家可能第一印象都是学院派的那些晦涩难懂的代码,充满了一大堆抽象的不知所云的符号,似乎只有大学里的计算机教授才会使用这些东西.在曾经 ...
- 取PE文件的引入表和导出表
直接上代码(这里列出C++和Delphi的代码),Delphi代码中包含导入及导出文件和函数列表,PE结构可参阅资料,很多很详细,需要注意的是,本例中是映射到内存,不是通过PE装载器装入的,所以对于节 ...
- 初探ListView和Adapter
关于Android Adapter(适配器),参考Devin Zhang’s blog.简单的说,Adapter起到的作用是使得前端的显示和后端的数据能够适配,用以下代码作为例子 1234567891 ...
- Oracle 转换函数
Oracle 转换函数 -- TO_CHAR(date|number {,fmt} {,nlsparams}) fmt:格式内容,返回的字符串是什么格式的,在此处指定:nlsparams:指定国家语言 ...
- php使用NuSoap调用java/C# webservice乱码问题
今天调用了一个 NuSoap 的接口程序,一切流程操作都很正常,就是最后接收返回值的时候出现了乱码问题(我这边是做一个越南项目固然返回越南语,不过认为中文应该同样实用,需要的人可以尝试下) 许多使 ...
- [置顶] android利用jni调用第三方库——第三篇——编写库android程序整合第三方库libhello.so到自己的库libhelloword.so
0:前言: 在第二篇中,我们主要介绍了丙方android公司利用乙方C++公司给的动态库,直接调用库中的方法,但是这样方式受限于: 乙方C++公司开发的动态库是否符合jni的规范,如果不规范,则不能直 ...
- 动画原理——线性来回运动&&波动
书籍名称:HTML5-Animation-with-JavaScript 书籍源码:https://github.com/lamberta/html5-animation 1.在正选函数中,随角度的增 ...
- PowerDesigner使用方法小结
PowerDesigner多用来进行数据库模型设计,具有SQL语句自动生成等功能.当然,也有不少缺点,比如团队分享. 一.设置PowerDesigner模型视图中数据表显示列 1.Tools-Disp ...