学习c++(五)常用排序算法
常用排序算法
1、冒泡算法
循环n*n次 依次将最大的元素移动到最右端
// 冒泡算法
void sortBubble(int arr[], int len){
for(int i=0;i<len-1;i++){
for(int j=0; j<len-i-1; j++){
if(arr[j+1]<arr[j]){
int tmp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = tmp;
}
}
}
}
2、插入算法
将数组分为包含1个元素的有序数组和len-1个元素的无序数组,依次插入len-1次
// 插入算法
void sortInsert(int arr[], int len){
int p,index;
for (int i=1;i<len;i++){
index = i-1 ;
p = arr[i];
while (index >= 0 && arr[index] > p){
arr[index+1] = arr[index];
index--;
}
arr[index+1] = p;
}
}
3、选择算法
循环n*n次 找到最小元素的下标放到最左边
// 选择算法
void sortSelect(int arr[], int len){
int index;
for (int i=0;i<len-1;i++){
index = i ;
for (int j=i; j<len;j++){
if(arr[index]>arr[j])
{
index = j;
}
}
int tmp = arr[i];
arr[i] = arr[index];
arr[index] = tmp;
}
}
4、快速算法
以一个元素为基准 大的放右边 小的放左边 依次递归
// 快速算法
int partition(int arr[], int low, int high){
int mark = low;
int p = arr[mark];
while( high > low){
if(p>arr[high]){
low++;
swap(arr,low,high);
continue;
}
high--;
}
swap(arr,mark,low);
return low;
}
void sortQuick(int arr[], int low, int high){
if(low>=high){
return;
}
int index = partition(arr,low,high);
sortQuick(arr,low,index-1);
sortQuick(arr,index+1,high);
}