/**
* 三種簡單的排序
* 本類中所有舉例都是按照從小到大進行排序
* @author caohaicheng
* @time 2014-07-24
*/
public class SortDemo {
//int[] score={7,10,35,21,78,2,1,9};
public static void main(String[] args) {
SortDemo sd=new SortDemo();
System.out.println("*********************************冒泡排序**********************************");
//冒泡排序
sd.BubbleSort();
System.out.println("*********************************選擇排序**********************************");
//選擇排序
sd.selectSort();
System.out.println("*********************************插入排序**********************************");
//插入排序
sd.insertSort();
}
/**
* 冒泡排序:循環進行相鄰的兩個數比較,然後根據規則決定是否調換位置
*/
private void BubbleSort() {
int[] score={7,10,35,21,78,2,1,9};
for(int i=1;i<score.length;i++){ //最多比較N-1次,每比較一輪就將所參與比較的數的最大值蠕動到這些數的最後面
/*
* 第二次循環的j很關鍵,因爲當第一輪比較結束,數組中的最大的那個值已經被放到最後一位了
* 第二輪的時候就不需要最後一個數字參與比較了,比較結束倒數第二大的數放在倒數第二的位置了
* 依次類推 ,最多比較N-1次就可以全部排序好。
*/
for(int j=0;j<score.length-i;j++){
if(score[j]>score[j+1]){
//兩個元素互換位置
int temp=score[j];
score[j]=score[j+1];
score[j+1]=temp;
}
}
System.out.print("冒泡排序第"+i+"次排序結果:");
for(int k=0;k<score.length;k++){
System.out.print(score[k]+"\t");
}
System.out.println();
}
System.out.print("冒泡排序最終排序的結果:");
for(int i=0;i<score.length;i++){
System.out.print(score[i]+"\t");
}
System.out.println();
}
/**
* 選擇排序:順序依次取出一個數與它後面的所有數進行比較,找出最小的然後交換位置
* 冒泡排序是跟相鄰的兩兩比較,發現比他小就交換位置; 而選擇排序是跟所有的都比較之後,確定了哪個最小,再交換位置
*
*/
private void selectSort(){
int[] score={7,10,35,21,78,2,1,9};
for(int i=0;i<score.length-1;i++){//沒循環依次就找到了一個最小值,最多循環N-1次
int minIndex=i;
for(int j=i+1;j<score.length;j++){//跟後面的所有數進行比較,找出那個最小的
if(score[minIndex]>score[j]){
minIndex=j;//找到最小值的下標了
}
}
//交換位置
int temp=score[minIndex];
score[minIndex]=score[i];
score[i]=temp;
System.out.print("選擇排序第"+i+"次排序結果:");
for(int k=0;k<score.length;k++){
System.out.print(score[k]+"\t");
}
System.out.println();
}
System.out.print("選擇排序最終排序的結果:");
for(int i=0;i<score.length;i++){
System.out.print(score[i]+"\t");
}
System.out.println();
}
/**
* 插入排序:跟玩撲克牌的時候抓牌"碼牌"類似,我們抓第一張牌不用排序,第二張牌要與第一張牌進行比較,如果小於第一張牌,那麼就
* 將第一張牌移動到第2的位置上
* 以後依次抓牌,與手牌從前往後依次比較,當發現小於某張手牌的時候就將抓到的牌放在該位置,該位置後的牌依次後移。
*
*/
private void insertSort(){
int[] score={7,10,35,21,78,2,1,9};
for(int i=1;i<score.length;i++){
int temp=score[i];
int j=i-1;
while(j>=0 && score[j]>temp ){
score[j+1]=score[j];
j--;
}
score[j+1]=temp;
}
System.out.print("插入排序最終排序的結果:");
for(int i=0;i<score.length;i++){
System.out.print(score[i]+"\t");
}
System.out.println();
}
}
面試中經常問的三種簡單排序方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.