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);
        }
    }
    天晴了,起飞吧
  • 相关阅读:
    C#中提供的精准测试程序运行时间的类Stopwatch
    [转]SQLite数据库扫盲
    [转]c# 使用ChartDirector绘图的一些个人体会
    [转]SQLite内存数据库
    SQL Server 各种查询语句执行返回结果
    [转]浅谈 BigInteger
    [转]SQLite数据库连接方式
    ASP.NET 3.5 开发大全DOC版
    好像昨天不见了100块钱。
    热烈庆祝本人昨天终于申请得了google ad
  • 原文地址:https://www.cnblogs.com/jianqiao123/p/11148797.html
Copyright © 2011-2022 走看看