幾類排序的思想及實現

2021-06-16 04:42:41 字數 1855 閱讀 4468

1.插入排序

(1).直接插入排序

//直接插入排序,把第乙個數看做是有序的,然後將後面的數不斷插入到前面有序的數列

void insert_sort(int a, int len)

//及時終止的氣泡排序

void bubble_sort(int a, int len)

}(2).快速排序

void quick_sort(int a, int low, int high)       //low為要排序的初始下標,high為要排序的最大下標

a[i]=pivot;

quick_sort(a, low, i-1);             //對左邊部分進行快速排序

quick_sort(a, i+1, high);            //對右邊部分進行快速排序}}

3.選擇排序

//在陣列a的beg到end範圍內尋找最小的數

int maxinarray(int a, int beg, int end)        

void select_sort(int a, int len)

}4.歸併排序

思想是將陣列兩部分,然後兩邊採用歸併排序形成兩個有序數列,然後將兩部分合併。

//將陣列a的lbeg到rbeg-1的數和rbeg到rend的數合併

void merge(int a, int lbeg, int rbeg, int rend)    

//如果是前半部分插入完畢,將後半部分剩餘的元素插入到陣列

while(j<=rend)

temp[index++]=a[j++];

//如果後半部分插入完畢

while(i<=rbeg-1)

temp[index++]=a[i++];

//將temp陣列的元素複製到a,將陣列temp[0]~temp[rend-lbeg]拷貝到a[lbeg]~a[rend]

int m=0;

for(int k=lbeg; k<=rend; k++,m++)

a[k]=temp[m];

delete temp;

}void merge_sort(int a, int low, int high)

}5.基數排序

思想:個位排序,十位排序,一直到最高位

//返回陣列內最大元素的下標

int max_in_array(int a, int len)

//返回乙個數共有多少位

int num_bit(int num)

//返回num在index位上的數字

int num_at_index(int num, int index)

//基數排序

void base_sort(int a, int len)

//按位數排序,從個位開始一直到最高位

for(int i=1; i<=num_bit(max_num); i++)

;//用來記錄每個箱子有多少個元素的陣列

//遍歷陣列a的各個元素,求出第i位的值

for(int j=0; j//更行箱子的元素個數的計數

count[number]++;

//將元素放到對應的箱子裡裡面

temp[number][count[number]-1]=a[j];

}//將箱子裡的元素放入到陣列a

int index=0;

for(int m=0; m<10; m++)

}

希爾排序思想及實現

希爾排序以插入排序為基礎,不同的或者說改進的地方是,插入排序或者其它排序解決不了資料太大的陣列,那樣會非常費時,而如果讓插入排序在乙個乙個向前插入之前使其部分有序,即讓它先以h的間隔有序,最後再執行一次插入排序會不會更快呢?答案是會的。1 主要思想 以上面說的為例,讓陣列以h為間隔進行插入排序,h ...

快速排序思想及Java實現

首先從後往前找,找到乙個比基準值小的數之後,停下來,與基準值交換 然後又從前往後找,找到乙個比基準值大的值,停下來,接著與基準值交換 直到,所有的數遍歷完畢,及左右陣列座標相等,則將基準值填入之前定義的座標中 即 陣列被分為左右兩個區間,接下來用遞迴對左右區間進行排序 public class ne...

快速排序思想及C 實現

ste p1.step 1.step1.通過一趟排序把資料分成兩部分,其 中 color 其中一部分的所有資料都要比另一部分的所有資料小,基準資料 稱為樞軸 排在這兩個子串行的中間 s te p2.step 2.step2.對這兩個子串行遞 歸 color 遞迴地呼叫排序演算法 int partit...