1.冒泡排序:
原理:比较相邻元素的大小,对于每次循环,按排序的规则把最值移向数组的一端,同时循环次数依次减少,例:
//定义一个0-9的乱序数组
int num[] = {3,0,1,8,7,2,5,4,6,9};
for (int i = 0; i < 10; i++){//比较的次数
for (int j = 0; j < 10-i-1; j++){
if (num[j] > num[j+1]) {
//交换j和j+1的值
int temp = num[j+1];
num[j+1] = num[j];
num[j] = temp;
}
}
}
//输出数组
for (int i = 0; i < 10; i++) {
printf("%d ", num[i]);
}
printf("\n");
return 0;
}
//输出结果:0 1 2 3 4 5 6 7 8 9
2.选择排序:
原理:先在未排序的数组中找出最值,通过交换将其放在数组第一位,然后再从剩余的未排序数组中找到另一个最值,将其放在已排序数组的末尾(第二次找到该最值后将其放在数组第二位)。以此类推,直到整个数组排完序。
//定义一个0-9的乱序数组
int num[] = {3,0,1,8,7,2,5,4,6,9};
for (int i = 0; i < 10-1; i++){
//默认这是最小的
//int min = num[i];//3
for (int j = i+1; j < 10; j++){
//控制用min和后面的每一个进行比较
if (num[i] > num[j]){
//j对应的数字比min还小 交换
int temp = num[i];
num[i] = num[j];
num[j] = temp;
}
}
//一次遍历之后找到最小的值min
num[i] = min;
}
//输出数组
for (int i = 0; i < 10; i++) {
printf("%d ", num[i]);
}
printf("\n");
return 0;
}
//输出结果:0 1 2 3 4 5 6 7 8 9
3.插入排序:
原理:将数据分为有序数列和无序数列两部分,一开始有序数列只有数列的第一个元素。对于无序数列的每个元素,要插入到有序数列中,方法是与有序数列中的末尾元素开始作比较,若前者大于后者则前者位置不变;否则,检索这个待插入元素小于第n个元素且大于或等于第n-1个元素的位置,同时将这个位置后面的元素往后移动(检索一次,移动一次),然后将其插入到这个位置。以此类推,直到无序数列元素个数为0。
//定义一个0-9的乱序数组
int num[] = {3,0,1,8,7,2,5,4,6,9};
for (int i = 0; i < 10; i++) {
//让i和i+1比较大小
if (num[i] > num[i+1]) {
//交换值
int temp = num[i];
num[i] = num[i+1];
num[i+1] = temp;
//让num[i]和前面的所有进行比较
for (int j = i; j > 0; j--){
if (num[j] < num[j-1]) {
temp = num[j];
num[j] = num[j-1];
num[j-1] = temp;
}
}
}
}
//输出数组
for (int i = 0; i < 10; i++) {
printf("%d ", num[i]);
}
printf("\n");
return 0;
}
//输出结果:0 1 2 3 4 5 6 7 8 9
网友评论