日期:2017/10/28
一、冒泡算法思想:
对于给定的n记录,从第一个开始依次对相邻的两个记录进行比较,若a[j-1] > a[j],那么两者进行交换,,进行了一轮比较后,n个记录的最大将位于第n位;接着,对前(n-1)个记录进行第二轮比较;重复该过程进行到只剩下一个为止。
代码如下:
package com.code.algorithm;
public class BubbleSort {
public static void main(String[] args){
int[] a = {88,66,999,45,22,1,35,68,88,44,11,99,85,253,44,56};
System.out.println("The original array is: "+a);
// Array.toString(a);
for(int n: a){
System.out.print(n+" ");
}
Bubble bubble = new Bubble();
a = bubble.sort(a);
System.out.println("The subsequent array is:"+a);
for(int n: a){
System.out.print(n+" ");
}
System.out.println("\n Bubbletest.sort()");
Bubbletest.sort();
}
}
class Bubbletest{
public static void sort(){
int[] arr = {88,66,999,45,22,1,35,68,88,44,11,99,85,253,44,56};
int temp = 0;
for(int i=0; i<arr.length; i++){
for(int j = 1; j<arr.length -i; j++){
if (arr[j-1]>arr[j]){
temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
}
}
}
for (int a=0; a<arr.length; a++){
System.out.println("序列的第"+a+"元素是:"+arr[a]);
}
}
}
class Bubble{
public static int[] sort(int[] arr){
int temp = 0;
for (int a=0; a<arr.length; a++){
for (int b=1; b<arr.length-a; b++){
if (arr[b-1] > arr[b]){
temp = arr[b-1];
arr[b-1] = arr[b];
arr[b] = temp;
}
}
}
for (int a=0; a<arr.length; a++){
System.out.println("序列的第"+a+"元素是:"+arr[a]);
}
System.out.println("foreach..");
for(int i : arr){
System.out.print(i+",");
}
System.out.println("\n foreach over..");
return arr;
}
}
二、选择排序算法思想:
对于给定的一组记录,经过第一轮比较得到最小的记录,然后将该记录与第一个记录位置交换;然后(除去第一个)对其他记录进行第二轮比较,最小与第二个记录位置交换,重复过程至剩下一个。
代码如下:
package com.code.algorithm;
import java.util.Arrays;
class SelectionSort{
public static void selectionSort(int[] a){
int n = a.length;
int lable = 0;
for (int i = 0; i<n; i++){
int k = i;
//find out the smallest one.
for (int j = i+1;j < n; j++){
if (a[j] < a[k]){
k = j;
}
}
if(k < i){
int temp = a[i];
a[i] = a[k];
a[k] = temp;
}
}
}
public class SelectionSorting {
public static void main(String[] args) {
SelectionSort ss = new SelectionSort();
int[] a = {9,8,7,6,5,4,3,2,1,0};
ss.selectionSort(a);
}
}
三、插入排序算法思想:
从第二个记录开始,与第一个组成子序列,比较选出最小者,插入到最前方(索引为0),此时两个元素为有序序列;然后加入第三个元素组成新的序列,根据大小将其插入到有序序列中;依次插入所有元素后,直至停止。
代码如下:
package com.code.algorithm;
import java.util.Arrays;
/*
* 下面是两个例子:直接插入StrightInsertionSort定义在另一个类里面,另一种插入排序方法则是定义在同一个类中
* */
public class StrightInsertion {
int k ;
public static void main(String[] args){
int[] arr = {12,15,13,46,55,1,5,3};
// StrightInsertionSort sis = new StrightInsertionSort();
// sis.strightinsertion(arr);
// System.out.println("********");
// strightinsertion(arr);
StrightInsertionSort si = new StrightInsertionSort();
int i = 0;
int n = arr.length;
si.strightInsertion(arr);
try{
while(i++ < n){
System.out.print(arr[i]+" ");
}
}catch (Exception e){
e.printStackTrace();
}finally{
System.out.println("end.");
}
}
public void a(){}
public static void strightinsertion(int [] arr){
int tmp ;
//不能对非静态字段 k 进行静态引用
// k = 10;
//不能对类型 StrightInsertion 中的非静态方法 a()进行静态引用
// a();
for (int i=1; i<arr.length; i++){
for(int j=i; j>0; j--){
if (arr[j]<arr[j-1]){
tmp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = tmp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
class StrightInsertionSort{
public final void strightInsertion(int [] arr){
if( arr != null){
int n = arr.length;
for(int i=1; i < n; i++){
int temp = arr[i] ;
int j = i;
if (arr[j-1] > temp){
while(j > 0 && arr[j-1] > temp){
arr[j] = arr[j -1];
j--;
}
}
arr[j] = temp;
}
}
}
}