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