常見排序演算法總結(一)

2021-07-25 03:51:07 字數 2203 閱讀 1183

這裡的排序演算法指內排序演算法,即在記憶體中排序;所謂排序為部分有序到全域性有序的過程,以下排序都以從小到大為例

1.直接插入排序

思想:好像打撲克牌一樣,尋找正確的位置插入,分三步走。一:尋找合適的位置。二:將後面的數往後移一位,騰出空間。三:插入

public class insortdemo ;//要定義哨兵,故空出a[0],在a[0]存個值

insortdemo(a);

} private static void insortdemo(int a)

//發現數比a[i]還小,說明過了,j多減了,要進行加一

j=j+1;

a[j]=a[0];

} for(int i=1;i2.計數排序

思想:過程在尋找各個數應該在的位置,不同的是沒有直接插在應該在的位置,而是記錄起來,維護著乙個陣列

public class countsortdemo ;

countsort(a);

} private static void countsort(int a) else

} } int temp=new int[a.length];//暫存排序後的陣列

for(int i=0;i

3.快速排序

思想:快速排序是一種不斷劃分的演算法,選取乙個數(一般序列取首個數),在序列中找到恰當的位置,怎樣算恰當,即使序列左邊的數都比這個數小,右邊的數大於或等於它,然後這個數的左邊右邊不斷遞迴這個操作,最終實現全域性有序

public class quicksortdemo ;

quicksort2(arry,0,arry.length-1);

for(int a:arry)

}private static void quicksort2(int arry, int start, int end) ;

bubblesort(a);

} private static void bubblesort(int a)

} n--;

}while(n!=1);

for(int x:a)

system.out.print(x+",");

}}

可以發現這個演算法又可以改進的地方,因為可能不用進行那麼多輪比較就已經排好,故可以設定標誌位。

private static void bubblesort(int a) 

} n--;

}while(n!=1&&flag);

for(int x:a)

system.out.print(x+",");

}

氣泡排序有多種寫法,這裡提供另一種寫法

private static void bubblesort2(int a) }} 

for(int x:a)

system.out.print(x+",");

}

5.選擇排序

思想:選出最小值與第一位交換位置,在剩餘數中選出第二小值與第二位交換位置.....以此類推

public class selectsortdemo ;

selectsort(a);

} private static void selectsort(int a)

}if(i!=min)//原本位置上的數不符合要求,與符合的數交換位置

}for(int x:a)

system.out.print(x+",");

}}

6.折半插入排序

思想:首先先了解折半查詢,就是不斷的二分,縮小要查詢的數的範圍

private static int binsearch(int a, int key) 

return low;//此時high小於low,就是沒找到要查詢的數,可返回-1.這邊返回的是要查詢的數應在的位置,low的位置即元素該在的位置

}

折半插入是對直接插入的改進,直接插入排序中,尋找元素的位置需要和前面的數乙個個比過去,這樣明顯效率低,因為前面的數已經排過了,即有序,那部分可用折半查詢,

注意只是替代尋找的那部分

private static void binsearchsort(int a) 

a[low]=a[0];//插入

} }

常見排序演算法總結

sort.cpp 定義控制台應用程式的入口點。include stdafx.h include using namespace std const int len 100 class csort 注意此處應該有分號 csort csort length len 建構函式,初始化陣列 arr j 1 ...

常見排序演算法總結

1.氣泡排序 蠻力法 基本思想 兩兩比較相鄰記錄,如果反序側交換,直到沒有反序的記錄為止。如果是正序排,將待排序的元素看作是豎著排列的 氣泡 較小的元素比較輕,從而要往上浮。時間複雜度 o n n void bubblesort int a,int n 優化的氣泡排序 if flag 0 break...

常見排序演算法(總結)

演算法名 時間複雜度 空間複雜度 穩定性氣泡排序o n2 o 1 不穩定 選擇排序o n2 o 1 不穩定 插入排序o n2 o 1 穩定 歸併排序o nlog n o n 可以優化到o 1 穩定 快速排序o nlog n o logn n 不穩定 堆排序o n logn o 1 不穩定 希爾排序o...