文章目录
前言一、选择排序1.1 原理1.2 代码实现
二、冒泡排序2.1 原理2.2 代码实现
三、交换排序3.1 原理3.2 代码实现
四、插入排序4.1 原理4.2 代码实现
五、折半排序5.1 原理5.2 代码实现
总结
前言
数组是一组有序数据的集合。这里的“有序”指的是数组元素在内存中的存放方式是有序的,其引用方式有规律可循,而不是说数组元素在数组中是按照数值大小有序排列的。那么有没有什么办法让数组元素按照数值大小有序排列呢?接下来,给大家分享一下数组的各种常用的五种排序算法。
数组常用的五种排序方式: 选择排序、冒泡排序、交换排序、插入排序、折半排序
注:本章内容实例均以从小到大排序为准,从大到小排序原理相同。聪明的你看完本章后学会原理,解决大到小排序问题不在话下!
一、选择排序
1.1 原理
选择排序原理:每次在待排序的数组中,查找最小值,与所在的数组中的第一个位置交换元素,下一次排序时,从第二个位置开始向后查找,以此类推。
我们拿到一个数组,第一次排序,在数组中找到最小值1,和查找数组的第1个位置的元素数据8互换,将元素1放在数组下标0的位置上。第一次排序后数组的顺序是1,5,10,3,8;第二次排序在【5,10,3,8】数组中查找到最小值3,和当前查找数组的第一个位置的元素5交换位置,得到排序后的顺序1,3,10,5,8;第三次在【10,5,8】中查找到最小值5,和当前查找数组的第一个位置互换,得到排序后的顺序1,3,5,10,8;第四次排序在【10,8】中查找到最小值8,和当前查找数组的第一个位置互换,得到排序后的顺序1,3,5,8,10。至此完成从小到大的排序。
1.2 代码实现
int arr[10] = {15,6,20,13,16,8,2,18,7,10};
int pos,min;//min表示最小数组元素,pos表示最小数组元素的下标
for (int i = 0; i //设置内层循环下标为i+1~9,表示剩下的未排序数组元素部分
if (min > arr[j]) {//重新修正最小值
min = arr[j];
pos = j;
}
}
arr[pos] = arr[i];//将最小元素和当先排序数组对应的元素交换位置
arr[i] = min;
}
for (int i = 0; i 15,6,20,13,16,8,2,18,7,10};
int i, j;
int temp;
int flag = 1;//结束冒牌排序的标志
while (flag) {
flag = 0;//如果本次冒泡排序没有进入进入到if语句内,则代表排序完成
for (i = 0; i //如果前面一个比后一个大,则进行交换
flag = 1;//将标志位置成1,
temp = arr[i + 1];//交换两个数据
arr[i + 1] = arr[i];
arr[i] = temp;
}
}
}
for (int i = 0; i
int arr[10] = { 15,6,20,13,16,8,2,18,7,10 };
int i, j;
int temp,pos;
for (i = 0; i //内循环,表示后面待比较的元素
if (arr[i] > arr[j]) {//第一个元素比当前元素大,则交换两者位置
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
for (int i = 0; i
int arr[10] = { 15,6,20,13,16,8,2,18,7,10 };
int pos, temp;
int i, j;
for (i = 0; i //当插入的元素小于前面的元素,并且要插入的值不是第一个元素
arr[pos + 1] = arr[pos];//插入数组
pos--;//继续向前比较
}
arr[pos + 1] = temp;//当插入的元素大于前面的元素,将这个位置设置为插入的值
}
for (int i = 0; i
int i, j;//i代表左侧指向位置left,j代表右侧指向位置right
int temp;
i = left;
j = right;
int middle = arr[(left + right) / 2];//获取中间值
do {
while ((arr[i] //查找右侧比中间值小的元素,记录位置
j--;
}
if (i //以right为右侧起点,继续递归
Change(left, j, arr);
}
if (right > i) {//以left为左侧起点,继续递归
Change(i, right, arr);
}
}
int main() {
int arr[10] = { 15,6,20,13,16,8,2,18,7,10 };
int pos, temp;
int i, j;
Change(0, 9, arr);
for (int i = 0; i |