插入排序,选择排序,希尔排序
一、插入排序从头开始依次选取一个元素和他前面的数比较先把值存为 c 这样就不用交换值了若比前面的元素大就让 qq 1的位置的值改为前面的数qq 往前移一位若前面的数小就把 qq 1的位置的值改为cvoid cha_ru(int* arr, int n) { for (int q 1; q n; q) { int c arr[q]; int qq q-1; while (qq 0) { if (arr[qq] c) { arr[qq 1] arr[qq]; qq--; } else { break; } } arr[qq 1] c; } return; }二、选择排序从前往后遍历最小的放前面最大的放后面缩小范围若最大的数在最前面判断一下因为最小的数交换时把最大的数换到其他位置了很简单。。。void xuan_ze(int* a, int n) { int begin 0, end n - 1; while (begin end) { int mini begin, maxi begin; for (int i begin 1; i end; i) { if (a[i] a[maxi]) { maxi i; } if (a[i] a[mini]) { mini i; } } int c a[begin]; a[begin] a[mini]; a[mini] c; if (maxi begin) { c a[mini]; a[mini] a[end]; a[end] c; } else { c a[maxi]; a[maxi] a[end]; a[end] c; } begin; --end; } }三、希尔排序分为两步1.预排序2.插入排序预排序的目的是使数组更加接近有序步骤设置一个变量值gap把数组分为gap组每个元素和他相距 gap-1 距离的元素为一组就是gap或-gap得到同组元素通过插入排序把每组数据顺序排列最后预排序完成最后一遍插入排序得到有序数组void Shell_pai(int* arr, int n) { int gap n; while (gap 1) { gap gap / 3 1; for (int st 0; st n - gap; st) { int s arr[stgap]; int qq st; while (qq 0) { if (arr[qq] s) { arr[qq gap] arr[qq]; qq - gap; } else { break; } } arr[qq gap] s; } } return; }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2608954.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!