1:简单排序算法
1.1冒泡排序
1.1.1 步骤
//首先实现一趟冒泡
void bubble(int arr[],int n){
for(int i=0;i<n-1;++i){
if(arr[i] > arr[i+1]){
swap(arr+i,arr+i+1);
}
}
}
//首先实现多趟冒泡
void bubble_sort(int arr[],int n){
for(int i=n;i>1;i--){
bubble(arr,i);
}
// while(n>1) bubble(arr,n--);
}
1.1.2 时间复杂度
一共比较n-1+n-2+…+2次== O(n^2)
1.1.3 空间复杂度
随着n的增长,排序不需要增加额外空间,空间复杂度为O(1)。
1.1.4优化
尝试对已排序的数列冒泡排序
1.1.5例子
1.2选择排序
1.2.1 步骤
//首先实现一趟,找出最大数字的下标
int find_max_index(int arr[],int n){
int max = arr[0];
int max_index = 0;
for(int i=1;i<n;++i){
if(max < arr[i]){
max = arr[i];
max_index = i;
}
}
return max_index;
}
//实现多趟将最大数字与最后数字交换
void selection_sort(int arr[],int n){
for(int i=n;i>1;--i){
int max_index = find_max_index(arr,i);
swap(arr+max_index,arr+i-1);// i是数组长度,最后一个元素下标要减1
}
}
1.2.2 时间复杂度
一共比较n-1+n-2+…+2次== O(n^2)
1.2.3 空间复杂度
随着n的增长,排序不需要增加额外空间,空间复杂度为O(1)。
1.2.4优化
同时选择最大值和最小值