java基本的三种排序算法

[quote][/quote]Java 三种基本的排序算法:
//冒泡法,自己会的第一个排序算法,
//原理:每次比较出整个数组最小的数
import java.text.*;
import java.util.*;
public class A
{
public static void main(String[] args){
int[] a={4,3,5,1};
for(int i=0;i<a.length;i++){
for(int j=i+1;j<a.length;j++){
if(a[i]>a[j]){
//下面是个人听别人说的一个很好用的小技巧 ^_^!
a[i]=a[i]+a[j];
a[j]=a[i]-a[j];
a[i]=a[i]-a[j];
}
}
}
for(int i:a)
{
System.out.println(i);
}
}
}

//插入排序
//原理:每次都拿数组中的一个数和前面已经排好的有序数组排序
class ChaRuSort
{
public static void main(String[] args)
{
int c=2,d=1;
new ChaRuSort().change(c,d);//Java中的参数传递都是值传递,切记,切记,所以出现了此输出结果,
System.out.println("c="+c); //也正以为这样,下面的排序算法没有调用change(),而是在当前的方法体内重新一个互换算法
System.out.println("d="+d);
int[] a={4,3,2,5,1,6};
a=ChaRuSort(a);
for(int i:a)
System.out.println(i);

}
public static int[] ChaRuSort(int[] sort){
int[] a=null;
for(int i=1;i<sort.length;i++){
int position=i;
while(position>0&&sort[position]<sort[position-1]){
int temp=sort[position];
sort[position]=sort[position-1];
sort[position-1]=temp;
position--;
}
}
a=sort;
return a;
}
public void change(int a,int b){
if(a>b){
int temp=a;
a=b;
b=temp;
}
System.out.println("a="+a);
System.out.println("b="+b);
}

}

//快速排序算法
//原理:从数组中随意找出一个数,将大于和小于它的数分置于其两边,然后再将其两边的数组都以同样的方法执行
//回头看了看,自己写了这么多的注释,其实还能写很多,想这些程序,细微之处都是妙处啊,都是一些基础而又重要的Java知识!现在才想起来以前老师说的,有些程序,短短几行代码,却有着上百行的注释,不假!
public class QSort {

/**
* @author CaiLong 2009-09-15
* @param left 从左边第left个数开始排序
* @param right 即将从left到right的这几个数排序
* middle的选择可以是第任意个数,但是因为算法的原因,如果不是第一个数的话,要将这个数和array[left]互换,然后进行此算法
*/
public static void QuickSort(int[] pData,int left,int right)
{
int i,j; //由于Java中的参数传递形式都是值传递,所以在此处多声明了两个"多余"的i,j,当到后面pData[left] = pData[j]时,传递的就是当前第j下标的元素,如果没有声明j,那么此处就是pData[left] = pData[right],而right是参数值传递,不会因为right++而改变,自然就出错了。
int middle,temp;
i = left;
j = right;
//下面的循环和循环内外的两个互换就是整个算法的核心了,需自己体会,多说无益
middle = pData[left];
while(true)
{
while((i++)<right-1 && pData[i]<middle);
while((j--)>left && pData[j]>middle);
if(i>=j)
break;
temp = pData[i];
pData[i] = pData[j];
pData[j] = temp;
}
pData[left] = pData[j];
pData[j] = middle;
//下面迭代方式^_^! 自己怎么就想不到呢 如此简单 自己不敢这样去想 2009-9-15
if(left<j)
QuickSort(pData,left,j);


if(right>i)
QuickSort(pData,i,right);
}

public static void main(String[] args){
int[] pData = new int[10];
for(int i = 0; i< 10; i++)
pData[i] = (int)(Math.random()*100);

for(int i = 0; i<pData.length; i++)
System.out.print(pData[i]+" ");

QSort.QuickSort(pData, 0, pData.length);

System.out.println("\n***********************");

for(int i:pData)
System.out.print(i+" ");
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值