插入排序
特點:stable sort、in-place sort,最好o(n),最壞o(n^2)
氣泡排序
特點:stable sort、in-place sort
思想:通過兩兩交換,像水中的泡泡一樣,小的先冒出來,大的後冒出來。
快速排序
改進當所有元素相同時的效率的partition實現:
堆排序
計數排序
基數排序
// 插入排序
void insert_sort(vector
& v, int l, int r)
v[j+1] = key;}}
}// 氣泡排序
void bubble_sort(vector
& v, int l, int r)
}}
}
}// 選擇排序
void select_sort(vector
& v, int l, int r)
}while(iwhile(jdelete a;
delete b;
}}void merge_sort(vector
& v, int l, int r)
}// 快排
int partition(vector
& v, int l, int r)
void quick_sort(vector
& v, int l, int r)
}// 堆排序
int parent(int i)
int leftchild(int i)
int rightchild(int i)
void maxheapify(vector
& v, int len, int i)
else
if(rchildv[maxpos])
if(maxpos != i)
}void buildheap(vector
& v, int len)
}void heap_sort(vector
& v, int len)
}// 計數排序
void count_sort(vector
& v, int len, int k)
for(int i=0; i// 基數排序
/* * get the spcific digit of given number.
* for example, number 234,
* the 0st digit is 4,
* the 1st digit is 3,
* the 2nd digit is 2,
* the 3th digit is 0.
*/int ge***igit(int nnumber, int nidx)
return nnumber % 10;}/*
* counting sort the given array according to specific digit.
* array: 待排序陣列.
* nlength: 待排序陣列長度
* nidxdigit: 排序要依據的位. 0為最低位,高位依次加1.
* nk: *nidxdigit位上可能出現的最大數字(對10進製數排序則nk=9).
*/void countingsort_specificdigit(vector
& array, size_t nlength, int nidxdigit, int nk=9)
// 把排序結果寫回原陣列
for(int i=0; iarray[i] = arrayresult[i];
delete digitnum;
delete count;
delete arrayresult;}/*
* 基數排序
* array: 待排序陣列
* nlength: 待排序陣列元素個數
* ndigit: 所有元素的最大位數
*/void radix_sort(vector
& array, size_t nlen, int ndigit)
}void printvec(vector
& v)
}int main()
cout
printvec(v);
insert_sort(v,0,v.size()-1);
cout
printvec(v);
for (int i = 0; i < 10; i++)
cout
printvec(v);
bubble_sort(v,0,v.size()-1);
cout
printvec(v);
for (int i = 0; i < 10; i++)
cout
printvec(v);
select_sort(v,0,v.size()-1);
cout
printvec(v);
for (int i = 0; i < 10; i++)
cout
printvec(v);
merge_sort(v,0,v.size()-1);
cout
printvec(v);
for (int i = 0; i < 10; i++)
cout
printvec(v);
quick_sort(v,0,v.size()-1);
cout
printvec(v);
for (int i = 0; i < 10; i++)
cout
printvec(v);
heap_sort(v,10);
cout
printvec(v);
for (int i = 0; i < 10; i++)
cout
printvec(v);
count_sort(v,10,5);
cout
printvec(v);
v.resize(20);
for (int i = 0; i < 10; i++)
cout
printvec(v);
radix_sort(v,20,1);
cout
printvec(v);
system("pause");
return
0;}
八大排序演算法總結
1.直接插入排序 原理 將陣列分為無序區和有序區兩個區,然後不斷將無序區的第乙個元素按大小順序插入到有序區中去,最終將所有無序區元素都移動到有序區 完成排序。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。實現 void insertsort node l,int length l i 1 l 0 ...
八大排序演算法總結
插入排序 1.直接插入排序 原理 將陣列分為無序區和有序區兩個區,然後不斷將無序區的第乙個元素按大小順序插入到有序區中去,最終將所有無序區元素都移動到有序區完成排序。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。實現 void insertsort node l,int length int i,...
八大排序演算法總結
插入排序 1.直接插入排序 原理 將陣列分為無序區和有序區兩個區,然後不斷將無序區的第乙個元素按大小順序插入到有序區中去,最終將所有無序區元素都移動到有序區完成排序。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。實現 void insertsort node l,int length int i,...