演算法常識 快速排序

2022-03-02 12:14:15 字數 2240 閱讀 4770

什麼是快速排序?

首先問道:比如說從大到小,如何確定乙個陣列中的乙個數已經排好了順序?

這個當然有很多種方式,比如說排序的時候最大值在最左邊,那麼確定了最左邊的位置,這就是冒泡的最基本的原理。

快速排序同樣有自己的規則,如果乙個數的右邊都小於他,左邊都大於他,是否這個數不需要變換位置?

答案是,是的。

快速排序就是這個原理,快速排序又分為了:

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...

排序演算法 快速排序演算法

網際網路的大型公司還在火熱招聘中,參與了一次又一次的筆試,都不通過,我還是太菜!作為程式設計人員,需要邁過去 資料結構與演算法 這個坎,畢竟,筆試不會真的很虧,加油吧,少些水,多點實操。一 快速排序演算法思想 從一組資料中找出乙個基準值,一般是選擇中間值作為基準值,然後從左到右將值與基準值進行比較,...

演算法 排序演算法 快速排序

快速排序是對冒泡法排序的一種改進。快速排序演算法 的基本思想是 將所要進行排序的數分為左右兩個部分,其中一部分的所有資料都比另外一 部分的資料小,然後將所分得的兩部分資料進行同樣的劃分,重複執行以上的劃分操作,直 到所有要進行排序的資料變為有序為止。可能僅根據基本思想對快速排序的認識並不深,接下來以...