菜菜又来啦,这次是要期末考了 随便写点可能不正确的理解
适用于已经至少看过一遍完整知识的 怕忘记来巩固的
完整版请移步b站大学
两层循环 每次都遍历相邻的元素 如果前面的大于后面的 就交换
//假设有一个大小为10的数组
int a[10];
for(int i=0;i<10;i++)
{
cin>>a[i];
}
//两层循环遍历
for(int i=1;i<=9;i++)
{
for(int j=1;j<=10-i;j++)
{
if(a[j]>a[j+1])//如果前一个大于后一个 就交换
{
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
每次从待排序的序列中找最小的那个元素,把这个元素和该序列第一个元素交换
举个栗子
假设我们有一个数组:5,3,6,2,10,我们要对这个数组进行升序排序。
若前n-1个元素已经排好序了,那么就把第n个元素和前面的元素一个个对比,放到第一个比他小的元素后面
举个栗子
比如,有一排卡片,数字分别是4,3,5,1。我们要用插入排序来排列它们。
插入排序就像是整理卡片,每次拿一张新卡片,然后找到它在已排序卡片中的正确位置并插入。这个过程一直进行,直到所有的卡片都排好序。
首先拿两个箭头指着这个序列的头和尾 然后把第一个元素作为基准 先拿出来 那第一个箭头就空了 把第二个箭头指着的元素和基准比 若比基准小 就把这个元素放到第一个箭头的位置 然后第一个箭头往后移一位 再把第一个箭头指着的元素和基准对比 比基准小就不动 箭头后移 否则放到第二个箭头指的空的位置 以此类推(总之就是箭头有指着的元素就和基准比 然后看大小 放到箭头指着的空的地方)
举个栗子
比如,你有一组数字 7,2,1,8,67,2,1,8,6,你要用快速排序来排序。
最终,整个序列变得有序:1,2,6,7,81,2,6,7,8。
快速排序就像是一个不断分组和细化的过程,每次都通过选择一个基准来将一组数字分成两部分,直到所有的数字都被正确地排列。这是一个非常高效的排序方法,特别适合处理大量数据。
选择一个间隔,然后隔着这个间隔的两个数比较 进行交换 小的放前面
然后不断缩小这个间隔 到最后间隔为1
举个栗子
选择的数字是 24,13,9,64,7,23,34,47。
选择初始间隔:首先,我们需要选择一个初始间隔。对于这8个元素的数组,我们可以选择间隔为4。
第一轮排序:按照间隔4,我们将数组分为两组进行插入排序。第一组是24,7,第二组是13,23,第三组是9,34,第四组是64,4764,47。排序这些小组后,数组变为 7,13,9,47,24,23,34,64。
减小间隔:接下来,我们减小间隔。假设我们现在选择间隔为2。
第二轮排序:按照间隔2,数组被分为4组:7,9,24,34、13,47,23,64。排序这些组后,数组变为 7,13,9,23,24,47,34,64。
最后一轮,间隔为1:最后,我们进行常规的插入排序,间隔为1。此时,由于前面的步骤,数组已经部分排序,所以这一步将会更快更高效。
完成排序:进行最后一轮的插入排序后,我们得到最终排序好的数组:7,9,13,23,24,34,47,64。
在这个例子中,通过先用较大间隔进行排序,然后逐渐减小间隔,希尔排序有效地将整个数组分成了小部分,使得最终的插入排序变得更加高效。
想象一下你正在整理一堆杂乱无章的漫画书,你的任务是按照它们的系列号码顺序排列好。
归并排序的过程:
分成小组:首先,你把这一大堆漫画书分成两半,然后再将每半分成更小的组,一直这样分下去,直到每个小组只有一本书或没有书。
合并小组:现在,你开始合并这些小组。每次合并,你都会比较两个小组中的书,并按顺序把它们放在一起。这样,小组里的书就会按照系列号码有序排列。
重复合并:继续合并更大的组,直到最后所有的小组都合并成了一组,而且里面的书都是有序的
准备十个桶 编号0-9 从个位数开始按照该位上的数的大小放进桶里排序
举个栗子
比如,你有一组数字 170,45,75,90,802,24,2,66,你要用基数排序来排序。
最终,通过基数排序,这组数字被排序成 2,24,45,66,75,90,170,802。
基数排序特别适合于对长度相同的数字进行排序,效率很高,但它也需要额外的空间来存放临时的桶和数据。
这个比较抽象 建议看视频
想象你有一堆乱序的数字,就像一堆玩具块,你需要按大小顺序排列它们。堆排序的过程就像是用这些玩具块建造一个金字塔,然后一步步拆解它,以达到排序的目的。
建造最大堆:首先,把所有的数字(玩具块)建造成一个最大堆。这个过程就像是把最大的块放在顶部,确保每个块都比它下面的块大。
排序:一旦最大堆建立完成,堆的顶部(金字塔的顶端)就是最大的元素。你把它从堆中移除,放到数组的末尾。这就像是从金字塔顶端拿走最大的块,并把它放到一边。
重建最大堆:移除顶部元素后,把剩下的元素重新调整为最大堆。这就像是重新调整剩下的块,确保顶部是最大的。
重复过程:重复这个过程,每次都从堆顶取出最大的元素,放到数组的正确位置,然后重建最大堆,直到所有元素都被移除并排序。
举个栗子
假设有一组数字 4,10,3,5,1,我们要用堆排序来排序。
建造最大堆:首先,将数组转换成最大堆。转换后可能得到 10,5,3,4,1(其中10是最大的,位于顶部)。
排序:移除堆顶的10,将其放到数组的末尾。现在数组变成了 1,5,3,4,10
重建最大堆:除去已排序的部分(10),剩下的部分 1,5,3,4重建为最大堆,可能得到 5,4,3,1
重复过程:继续这个过程,再次移除堆顶的5,放到数组的末尾(前一个最大值的前面),然后重建最大堆,以此类推。
完成排序:重复这个过程直到所有元素都被移除并排序,最终得到排序好的数组 1,3,4,5,10
不知道大家看懂没有 反正我看懂了#^#