什麼是快速排序?
首先問道:比如說從大到小,如何確定乙個陣列中的乙個數已經排好了順序?
這個當然有很多種方式,比如說排序的時候最大值在最左邊,那麼確定了最左邊的位置,這就是冒泡的最基本的原理。
快速排序同樣有自己的規則,如果乙個數的右邊都小於他,左邊都大於他,是否這個數不需要變換位置?
答案是,是的。
快速排序就是這個原理,快速排序又分為了:
1.雙邊迴圈排序;
2.單邊迴圈排序;
這個下面具體會介紹到。
一些術語:
基準元素:當前需要確定的元素,也就是對比元素。
參考:程式設計師小灰這本書
比如說我要對4進行排序,那麼,我需要做的事比較1,因為1<4,那麼繼續往後2小與4,然後繼續往後,4<6,保留當前6的索引。
然後從右開始,是7,7>4,那麼繼續往前,然後8也大於,繼續,然後是2小於,那麼6和2互動位置。然後一直迴圈下去,當left等於right,那麼結束,並且4和left等於right這個位置上交換數字。
下面使用的遞迴方式,**也相當簡單。
static void main(string args)
; quicksort(intarr,0,intarr.length);
}public static void quicksort(int arr,int startindex,int endindex)
var baseindex=changeindex(arr,startindex,endindex);
quicksort(arr,startindex,baseindex-1);
quicksort(arr, baseindex+1, endindex);
}public static int changeindex(int arr,int startindex,int endindex)
if (right != left)
}arr[startindex] = arr[left];
arr[left] = basenum;
return left;
}
單邊迴圈 如下圖:
比如說4大於1那麼不變,然後4>2同樣不變,然後到5,5>4,將這個標記記為mark,就是說這個以後要用乙個小的數字來替換,然後4>3,所以用3和5替換掉。
我一開始是有乙個疑問的,如果後面繼續是比5大的數呢?mark是否要移動過去,其實是不用的,因為這樣的用途是把小於4的盡量往左遷移,這才是真正的用途。
**比較簡單如下:
static void main(string args)
; quicksortsingle(intarr,0,intarr.length);
}public static void quicksortsingle(int arr, int startindex, int endindex)
var baseindex = changesingleindex(arr, startindex, endindex);
quicksortsingle(arr, startindex, baseindex - 1);
quicksortsingle(arr, baseindex + 1, endindex);
}public static int changesingleindex(int arr, int startindex, int endindex)
} arr[startindex] = arr[left];
arr[left] = basenum;
return left;
}
static void main(string args)
; quicksortsingle(intarr,0,intarr.length);
}public static void quicksortsingle(int arr, int startindex, int endindex) }}
public static int changesingleindex(int arr, int startindex, int endindex)
} arr[startindex] = arr[left];
arr[left] = basenum;
return left;
}
演算法常識 氣泡排序
氣泡排序是一種通用的演算法,凡是通用的,可以理解為效率不高,但是通用。從小到大的排序 static void main string args sort intarr foreach var i in intarr console.readkey public static void sort in...
排序演算法 快速排序演算法
網際網路的大型公司還在火熱招聘中,參與了一次又一次的筆試,都不通過,我還是太菜!作為程式設計人員,需要邁過去 資料結構與演算法 這個坎,畢竟,筆試不會真的很虧,加油吧,少些水,多點實操。一 快速排序演算法思想 從一組資料中找出乙個基準值,一般是選擇中間值作為基準值,然後從左到右將值與基準值進行比較,...
演算法 排序演算法 快速排序
快速排序是對冒泡法排序的一種改進。快速排序演算法 的基本思想是 將所要進行排序的數分為左右兩個部分,其中一部分的所有資料都比另外一 部分的資料小,然後將所分得的兩部分資料進行同樣的劃分,重複執行以上的劃分操作,直 到所有要進行排序的資料變為有序為止。可能僅根據基本思想對快速排序的認識並不深,接下來以...