转自girlcool专栏,稍加整理
冒泡排序
void bubble_sort(int *array, int len){
int temp = 0;
for(int i = 1; i != len; ++i){ //
for(int j = 0; j != len-i; ++j){ // 内循环,将
if(array[j] > array[j+1]){ //
tmp = array[j]; //
array[j] = array[j+1]; //
array[j+1] = tmp; //
}
}
}
}
插入排序
void insert_sort(int *array, int len){
for(int i = 1; i != len; ++i){ // i左边是递增排序,i及i右边未排序
for(int j = 0; j != i; ++j){ //
if(array[i] < array[j]){ // 在递增序列中找到插入位置
int tmp = array[i]; //
for(int k = i-1; k >= j; --k){ // 将插入位置右端到i整体右移,空出插入位置j
array[k+1] = array[k]; //
} //
array[j] = tmp; // 将当前i放到插入位置j处,此轮插入完毕
break; //
}
}
}
}
选择排序
void select_sort(int *array, int len){ //
for(int i = 1; i != len; ++i){ // 左端未排序减少,右端已排序向左端推进
int index = 0;
for(int j = 1; j <= len-i; ++j){ // 最右端是已经递增排序好的
if(array[index] < array[j]){ // 找到左端没有排序的序列的最大值
index = j;
}
}
int tmp = array[index]; // 将未排序的最大值放到右端开头
array[index] = array[len-i];
array[len-i] = tmp;
}
}
快速排序
int partition( int* array, int start, int end){
int key = array[start];
int l = start;
int r = end;
while(l < r){ // l左侧是不大于key,r右侧是大于key
while(l < r && key < array[r]){ // r向左侧推进
-- r;
}
std:: swap<int>(array[l], array[r]); // 将r值与左侧l值交换
while(l < r && key >= array[l]){ // l向右侧推进
++ l;
}
std:: swap<int>(array[l], array[r]);
}
return l;
}