码迷,mamicode.com
首页 > 编程语言 > 详细

简单排序:直接插入排序

时间:2019-07-08 00:13:20      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:str   长度   实现   ring   rgs   add   直接   基本   col   

直接插入排序(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("\n");

    insert_sort(a, ilen);

    printf("after  sort:");
    for (i=0; i<ilen; i++)
        printf("%d ", a[i]);
    printf("\n");
}

直接插入排序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);
    }
}

简单排序:直接插入排序

标签:str   长度   实现   ring   rgs   add   直接   基本   col   

原文地址:https://www.cnblogs.com/jianqiao123/p/11148797.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!