排序: 冒泡排序
插入排序
选择排序
快速排序
优酷搜索 :舞动的排序
排序实现方式:(程序里面尽量做到循环层级少于等于两个 )
一个循环:一次遍历就结束
两个循环:每一次内部又有循环
冒泡排序实现方式:每次遍历整个数组,找到最大的一个数沉底
如果数组有N个元素
第一次需要遍历N-1次(沉第一个数据)
第二次需要遍历N-2次 (沉第二个数据)
第三次需要遍历N-3次(沉第三个数据)
。。。
总共需要比较N-1次
代码如何实现
两层循环:第一层循环控制总共需要遍历多少次
3 0 1 8 7 2 5 4 9 6
10个元素只需要遍历10-1次就能排好序
第二层循环控制每次遍历需要遍历多少次才能找到最大值
每次从头i = 0开始,让i和i+1进行比较,确保i+1是最大的
选择排序:外层循环控制需要遍历多少次(n-1)
内层循环遍历出当前最小的数
//冒泡排序
int main(){
int num[10] = {3,0,1,8,7,2,5,4,9,6};
for(int i = 1; i < 10; i++){//控制总共遍历次数
//开始每一次遍历 找到一个最大的数沉底
for(int j = 0; j < 10-i; j++){
//让j和j+1的值进行比较
if(num[j] > num[j+1]){
//交换j和j+1的值
int temp = num[j];
num[j] = num[j+1];
num[j+1] = temp;
}
}
}
//输出
for(int i = 0; i < 10; i++){
printf("%d ", num[i]);
}
return 0;
}
//选择排序
int num[10] = {3,0,1,8,7,2,5,4,9,6};
for(int i = 0; i < 10-1; i++){//控制次数
//取出i对应的数,默认是最小的数
int temp = num[i];
//从i后面开始查找当前最小的数 放到i的位置
for(int j = i+1; j < 10; j++){
//让temp和i后面的每个数进行比较
//temp始终保存最小的那个数
if(num[j] < temp){
//交换
int n = temp;
temp = num[j];
num[j] = n;
}
}
//当前的temp值是最小的,写入i对应的位置
num[i] = temp;
}
//输出
for(int i = 0; i < 10; i++){
printf("%d ", num[i]);
}
return 0;
}
//插入排序
int num[10] = {3,0,1,8,7,2,5,4,9,6};
for(int i = 0; i < 10-1; i++){//控制次数
//判断i和i+1的大小
if(num[i] > num[i+1]){
//换位置
int temp = num[i];
num[i] = num[i+1];
num[i+1] = temp;
//让i对应的值和前面所有的值进行比较
for (int j = i; j > 0; j--){
//j和j-1进行比较
if(num[j] > num[j-1]){
//当前这个位置就是这个数字的位置
break;
} else{
//j和j-1换位置
int temp = num[j];
num[j] = num[j-1];
num[j-1] = temp;
}
}
}
}
//输出
for(int i = 0; i < 10; i++){
printf("%d ", num[i]);
}
return 0;
}