1 冒泡排序
template<class T>
void bubbleSort(vector<T> data) {
for(int i = 0,len = v.size(); i< len-1; i++) {
bool exchange = false;
for(int j = 0; j<len-1; j++) {
if(data[j] > data[j+1]) {
exchange = true;
swap(data[j],data[j+1]);
}
}
if(exchange == false) {
break;
}
}
}
2 插入排序
template<class T>
void insertSort(vector<T> data) {
for(int i = 1,len = v.size(); i<len; i++) {
if(data[i-1] > data[i]) {
int temp = data[i];
int j = i - 1;
whlie(j >= 0 && temp < data[j]){
data[j+1] = data[j];
j--;
}
data[j+1] = temp;
}
}
}
3 选择排序
template<class T>
void selectSort (vector<T> data) {
for(int i=0,len=v.size(); i < len-1; i++) {
int index = i;
for(int j = i+1; j <= len-1; j++) {
if(data[j] < data[index]) {
index = j;
}
}
if(index != i) {
swap(data[i],data[index]);
}
}
}
4 快速排序
template<class T>
void quickSort(vector<T> data,int left,int right) {
int index = left;
int pivot = data[left];
for(int i = left+1 ; i<= right ; i++) {
if(data[i]< pivot) {
index++;
if(index != i) {
swap(data[i],data[index]);
}
}
}
data[left] = data[index];
data[index] = pivot;
if(left < right) {
quicksort(data,left,index-1);
quicksort(data,index+1 ,right);
}
}
5 堆排序
template<class T>
void siftDown(vector<T> data,int start,int end) {
int parent = start;
int child = 2*parent+1;
int temp = data[parent];
while(child < end) {
if(child+1 < end && data[child] < data[child+1]) {
child++;
}
if(temp >= data[child]) {
break;
}
data[parent] = data[child];
parent = child;
child = 2*child+1;
}
data[parent] = temp;
}
template<class T>
void heapSort(vector<T> data) {
for(int i = (v.size()-2)/2; i>=0 ; i-- ) {
siftDown(data,i,len);
}
for(int i = len-1 ; i>0 ; i--) {
swap(data[0],data[i]);
siftDown(data,0,i);
}
}