zoukankan      html  css  js  c++  java
  • 简单排序:直接插入排序

    直接插入排序(Straight Insertion Sort)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。

    直接插入排序代码:

    /*
     * 直接插入排序
     *
     * 参数说明:
     *     a -- 待排序的数组
     *     n -- 数组的长度
     */
    void insert_sort(int a[], int n)
    {
        int i, j, k;
    
        for (i = 1; i < n; i++)
        {
            //为a[i]在前面的a[0...i-1]有序区间中找一个合适的位置
            for (j = i - 1; j >= 0; j--)
                if (a[j] <= a[i])
                    break;
    
            //如找到了一个合适的位置
            if (j != i - 1)
            {
                //将比a[i]大的数据向后移
                int temp = a[i];
                for (k = i - 1; k > j; k--)
                    a[k + 1] = a[k];
                //将a[i]放到正确位置上
                a[k + 1] = temp;
            }
        }
    }

    直接插入排序C实现:

    #include <stdio.h>
    
    // 数组长度
    #define LENGTH(array) ( (sizeof(array)) / (sizeof(array[0])) )
    
    /*
     * 直接插入排序
     *
     * 参数说明:
     *     a -- 待排序的数组
     *     n -- 数组的长度
     */
    void insert_sort(int a[], int n)
    {
        int i, j, k;
    
        for (i = 1; i < n; i++)
        {
            //为a[i]在前面的a[0...i-1]有序区间中找一个合适的位置
            for (j = i - 1; j >= 0; j--)
                if (a[j] < a[i])
                    break;
    
            //如找到了一个合适的位置
            if (j != i - 1)
            {
                //将比a[i]大的数据向后移
                int temp = a[i];
                for (k = i - 1; k > j; k--)
                    a[k + 1] = a[k];
                //将a[i]放到正确位置上
                a[k + 1] = temp;
            }
        }
    }
    
    void main()
    {
        int i;
        int a[] = {20,40,30,10,60,50};
        int ilen = LENGTH(a);
    
        printf("before sort:");
        for (i=0; i<ilen; i++)
            printf("%d ", a[i]);
        printf("
    ");
    
        insert_sort(a, ilen);
    
        printf("after  sort:");
        for (i=0; i<ilen; i++)
            printf("%d ", a[i]);
        printf("
    ");
    }

    直接插入排序Java实现:

    import java.util.*;
    
    public class InsertSort {
        private static int[] Sort(int[] arr) {
            int i, j;
            int insertNote = 0;// 要插入的数据
            int[] array = arr;
            // 从数组的第二个元素开始循环将数组中的元素插入
            for (i = 1; i < array.length; i++) {
                // 设置数组中的第2个元素为第一次循环要插入的数据
                insertNote = array[i];
                j = i - 1;
                // 比较关键元素与前一个,若成立后退一个位置
                // 在最幸运的那种情况当中,这个循环语句是不会执行的
                for (; j >= 0 && insertNote < array[j]; j--) {
                    array[j + 1] = array[j];
                }
                array[j + 1] = insertNote;
            }
            System.out.println(Arrays.toString(array));
            return array;
        }
    
        public static void main(String[] args) {
            Random random = new Random();
            int[] aa = new int[10];
            for (int i = 0; i < 10; i++) {
                aa[i] = Math.abs(random.nextInt() % 100);
            }
            InsertSort.Sort(aa);
        }
    }
    天晴了,起飞吧
  • 相关阅读:
    为了兼容性问题,本人一律淘汰不兼容如下三种浏览器的js
    http://store.microsoft.com/home.aspx
    <转>JavaScript的IE和火狐的兼容性解决办法
    常用的正则表达式 我转与改的吧
    线程间操作无效: 从不是创建控件“textBox4”的线程访问它
    练习题 求a[i]到a[j]累积和为最大的部分
    自己写的操作记录的类,就是记录各种操作[原创]
    【MM系列】SAP MM中的委外加工与信息记录
    【MM系列】SAP MM模块-移动类型全部列表
    【MM系列】SAP MM模块-组织结构介绍
  • 原文地址:https://www.cnblogs.com/jianqiao123/p/11148797.html
Copyright © 2011-2022 走看看