赞
踩
一.直接插入排序:
原理:将数组分为无序区和有序区两个区,然后不断将无序区的第一个元素按大小顺序插入到有序区中去,最终将所有无序区元素都移动到有序区完成排序。
- int* InsertSort(int a[] , int n) {
- for(int i = 1; i < n ; i++) {
- if(a[i] < a[i-1]) {
- int tmp = a[i];
- int j = i-1;
- while(j >= 0 && tmp < a[j]){
- a[j+1] = a[j];
- j--;
- }
- a[j+1] = tmp;
- }
- }
- return a;
- }
- /**
- * 直接插入排序的一般形式
- *
- * @param int dk 缩小增量,如果是直接插入排序,dk=1
- *
- */
- void ShellInsertSort(int* a , int n ,int dk) {
- for(int i = dk ; i < n ;i++) {
- if(a[i] < a[i-dk]){
- int tmp = a[i];
- int j = i-dk;
- while(j >= 0 && tmp < a[j]) {
- a[j+dk] = a[j];
- j-=dk;
- }
- a[j+dk] = tmp;
- }
- }
- }
-
- /**
- * 先按增量d(n/2,n为要排序数的个数进行希尔排序
- *
- */
- void ShellSort(int* a ,int n) {
- int dk = n/2;
- while(dk >=1) {
- ShellInsertSort(a , n ,dk);
- dk=dk/2;
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。