排序
优酷:舞动的排序
(魔性的舞蹈带你感受排序的魅力)
下面简单介绍一下常用的排序方法
插入排序
int main(){
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;
}
选择排序
每次外层循环控制遍历多少次(n-1)
内层循环遍历出当前最小的数
int main(){
//选择排序
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;
}
冒泡排序
实现方式 每次遍历整个数组 找到最大的数 沉底
如果数组有n个元素
第一次需要遍历n-1次
第二次需要遍历n-2次
...
总共需要比较n-1次
代码如何实现
两层循环
第一层控制总共遍历多少次
例如:5 0 4 7 9 8 6 3 1 2
10个元素只需遍历10-1次就能拍好序
第二层控制每次循环需要遍历多少次才能找到最大值
每次从头开始i=0 让i和i+1比较 确保i+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;
}
小提示
程序里面尽量做到循环层级不多于两个
界面层级 主页>>详情>>
三类循环
1.一个循环 :一次遍历就结束
2.两个循环 :每一次内部又有遍历
3.多个循环