排序:是將乙個資料元素的任意序列,重新排列成乙個按照關鍵字的序列。
通常在排序的過程中需要進行兩種基本操作:
1、比較兩個關鍵字的大小;
2、將乙個關鍵字從乙個位置移動到另乙個位置。
排序的方法有很多種,每一種方法都有其各自的優缺點,分別適合於不同的環境下使用,對於內部排序大致可以分為插入排序,
交換排序、選擇排序,歸併排序等排序方法。
下面我介紹幾種比較常用的特別是在我們找工作面試中經常會問到的幾種排序方法:
一. 氣泡排序
氣泡排序的思想比較簡單:先將n個元素中的第乙個和第二個比較,如果兩個元素的位置為逆序,那麼就交換兩個個元素的位置;然後比較第二個和第三個元素關鍵字,如此類推,直到比較第n-1個元素和第n個元素為止;
下面是氣泡排序的**形式:
//氣泡排序
int arr = new int;
for(int j=0;j//比較的輪數
for(int i=0;iarr[i+1])
system.out.print(arr[i]+" ");
}}
效率的分析:
1、空間效率:僅使用乙個輔存單元。
2、時間效率:如果元素的個數為n,則總共要進行n-1趟排序,對j個元素的字序列進行一趟氣泡排序需要進行j-1次關鍵字比較。
二、選擇排序
選擇排序的思想:第一趟,在n個元素用第乙個位置上的元素與其餘n-1個元素進行比較,如果逆序則交換位置, 則第乙個角標上的元素就確定好了;
第二趟,第二個位置的元素再與其餘的元素比較,如果逆序則交換元素的位置,則第二個位置 上的元素就確定好了,以此類推,直到整個序列有序。
下面是選擇排序的**形式:
for(int i=0;iarr[j])
}}
效率的分析:
1、空間效率:選擇排序也只需要乙個輔助空間。
2、選擇排序移動的次數相對較少,在序列基本有序的情況下基本不需要移動次數,所以選擇排序的大 量時間是用在了比較上了。
三、二分法查詢
二分查詢也叫折半查詢,此方法需要帶查詢的表必須是有序的;
二分查詢的基本思想:首先將查詢表中間位置資料元素的關鍵字與給定關鍵字比較,如果相等則查詢成功;否則 利用中間元素將表一分為二,如果中間元素關鍵字大於給定關鍵字,則在前一子表中進行 折半查詢,否則在後一子表中進行折半查詢,重複上述動作直到查詢成功。到最後如果子 表為空則查詢不成功。
下面是二分查詢的**形式:
for (int i = 0; i < arr.length; i++)
int minindex = 0;
int maxindex = arr.length-1;
int midindex = (minindex+maxindex)/2;
int number = 100;
while(arr[midindex]!=number)
if(minindex>maxindex)
midindex = (minindex+maxindex)/2;
} system.out.println();
system.out.println(midindex);
二分查詢:適用於不經常變動而查詢頻繁的有序表。 二分查詢排序
static final int n 15 static void quicksort int arr,int left,int right 快速排序演算法 if ltemp rtemp ltemp if leftx high mid 1 else low mid 1 return 1 未找到 pu...
排序 二分查詢
實現歸併排序 快速排序 插入排序 氣泡排序 選擇排序 堆排序 選做 完成leetcode上的返回滑動視窗中的最大值 239 這是上一期第三天的任務進行保留 涉及佇列可以對第二天進行整理複習 程式設計實現 o n 時間複雜度內找到一組資料的第 k 大元素 def insert sort alist n...
二分查詢總結
今天上csdn,發現一篇關於二分查詢演算法的文章被置頂,回帖也相當熱烈。我覺得演算法總重要的還是要了解思想,至於程式設計技巧則是其次。二分查詢在計算中演算法中的重要性不言而喻,許多變形的演算法都是基於此演變的,比如二分查詢樹等。所以此演算法程式我也打算總結一下。當然經典的演算法討論莫過於jon be...