首页 > 编程知识 正文

堆排序图解,快速排序算法的原理图解

时间:2023-05-06 09:04:29 阅读:141679 作者:2902

文章目录直接插入排序1 .前向比较1.1图解直接插入排序1.2 C语言实现2 .后向比较2.1图解直接插入排序2.2 C语言实现

直接插入数组进行排序和比较,移动其他数据位置,直接插入。

从小到大排序时间复杂度o(n2 ) )。

如果排列本身是有规律的,时间复杂度下降到o(n )空间复杂度o )1),是稳定的

1 .进行比较1,遍历数组,arr[i]从第二个数字到最后一个数字。 2 .首先定义tmp以保存arr[i]的值,使得数字移动不覆盖arr[i]的值。 3、从开始,与I的下标值,即tmp (和I之前,即下标0((I-1 ) )的数字arr )进行比较。 4、发现某个下标j的值arr[j]大于tmp时,停止比较,退出循环。 5、将下标j ~ i-1的位上的数字逐位向后移动,正好填补arr[i]的空位置(从最后一位i-1开始移动,使数据不重叠)。 6 .将tmp的值分配给比它大的位数的arr[j],完成交换。 1.1图解直接插入排序

1.2 C语言为voidinsertsort(int*arr,int len ) /从小到大)/4、6、8、9、5、7,对5进行排序,如果6大于5,则停止,6、8、9后一个int tmp; for(I=1; i len; I//从第二个数字开始遍历,输入{tmp=arr[i]; //将该数字I备份为for (j=0; j i; j(//判断那位的数字I为其前面的所有数字,往前走再判断(if(ARR[j]tmp )//如果某位的数字j大于该数字,停止判断循环) {break; }for(intk=I-1; k=j; k--//将该数字前面的数字i-1和比其大的数字j之间的所有数字逐位向后统一{arr[k 1]=arr[k]; //从后面移动}arr[j]=tmp; //如果某位数的数字j大于该数字,则将该数字I移动到数字j的位置并完成交换}

2 .从后到前比较1,遍历数组,arr[i]是第二个数字到最后一个数字。 2 .首先定义tmp以保存arr[i]的值,使得数字移动不覆盖arr[i]的值。 3、从后向前,比较I的下标值,即tmp (和I之前,即下标0((I-1 ) )的数字arr[j]。 4、如果下标j的值arr[j]大于tmp,则将该数字arr[j]向后移动1位直至j 15,如果发现某个下标j的值arr[j]为tmp以下的值,则跳出循环6,将tmp移动到j的下一位arr[j] (该位置的值已经移动到大于tmp的下一位2.1图解直接插入排序

2.2 C语言按voidinsertsort(int*arr,int len ) /从小到大、排序顺序、)/4、6、8、5、9、7、5进行排序,8大于5,8在一个后面,6大于5 int tmp; for(I=1; i len; I//从第二个数字开始遍历,输入{tmp=arr[i]; //将该数字I备份到for中(j=I-1; j=0; j----//判断该数字I和其前面的所有数字,{if(arr ) j ) tmp ) /从后面判断当前位的数字大于该数字(arr(j1 )=arr ) j ); //将该数字j向后移动一位(}else//当某位数字j变为该数字以下时,判断循环) {break; }}arr[j 1]=tmp; //如果某个数字j小于或等于该数字,则将该数字放在数字j之后}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。