C++、C#、java算法学习日记03----插入排序

本文介绍了插入排序的基本思想和工作原理,通过比较元素将待插入的数放在已排序序列的正确位置。分别展示了C++、C#、Java的插入排序实例,并讨论了其在已排序数组上的时间复杂度优势。
摘要由CSDN通过智能技术生成

     有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法---插入排序。插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序。

基本思想:

     每一步将要插入的数与前面有序序列中的元素依次相比较,找到合适的位置后,数列部分后移腾出空间,待插入的元素插入数列,直到全部插完为止。(这里想一想我们打麻将或者斗地主的时候是怎么码牌的,懂了吧^_^!

    还是写个例子吧,要求对63,4,24,1,3,15使用插入排序法从小到大排列。

C++实例:

#include<iostream>

using namespace std;
//输出
void ShowArray(int *array,int Length)
{
  for(int i=0;i<Length;i++)
  {
    cout<<array[i]<<"  ";
  }
  cout<<endl;
}
//插入排序
void InsertSort(int *array,int Length)
{
	int i,j,key;
  for(i=1;i<Length;i++) //确定待插入元素
  {
	  key = array[i];  //key为待插入元素
    for(j=i;j>0&&array[j-1]>key;j--) //查找要插入的位置,循环结束,则找到插入位置
	{
	    array[j]=array[j-1]; //向后移位,腾出插入的空间
	}
	array[j]=key; //插入元素
  }
  ShowArray(array,Length);
}
void main()
{
	int array[]={63,4,24,1,3,15};
	int Length=sizeof(array)/sizeof(array[0]);
	InsertSort(array,Length);
}


 

C#实例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Sort
{
    class Sort //定义Sort类
    {//定义插入排序方法
        public void InsertSort(int[] array)
        {
           int i,j,key;
            for(i=1;i<array.Length;i++) //控制要插入的元素
            {
                key=array[i];
                for(j=i;j>0&&array[j-1]>key;j--) //确定要插入的位置
                {
                    array[j] = array[j - 1];
                }
                array[j] = key; //插入元素
            }
            ShowArray(array);
        }
        public void ShowArray(int[] array)
        {
            foreach (int i in array)
            {
                Console.Write(i+"  ");
            }
            Console.WriteLine();
        }
        static void Main(string[] args)
        {
            int[] array = new int[] {63,4,24,1,3,15};
            Sort sorter = new Sort();
            sorter.InsertSort(array);
        }
    }
}


结果:

java实例:

package Sort;

public class InsertSort {
	public void insertsort(int[] array)
{
	int i,j,key;
   for(i=1;i<array.length;i++)
   {
	   key=array[i];
	   for(j=i;j>0&&array[j-1]>key;j--)
	   {
	      	   array[j]=array[j-1];
       }
	   array[j]=key;
   }
   showArray(array);
}
public void showArray(int[] array)
{
	for(int i : array)
	{
		System.out.print(i+"  ");
	}
	System.out.println();
}
	public static void main(String[] args) {
 
		int[] array = new int[]{63,4,24,1,3,15};
		InsertSort sorter = new InsertSort();
		sorter.insertsort(array);
	}

}


结果:

 

 

     我们将直接插入排序与冒泡、选择排序相比较,感觉没多大变化,而且都有2个for循环也就是说时间复杂度是相差不多的都是n*n,但是如果排列的是一组已经排好序的数组,这就大不一样了,插入排序的时间复杂度就变成0了,要比冒泡快的很多。关于插入排序还有很多改进的算法,我们后面再说了。

 

 

      有什么错误的地方,或不妥 的地方,欢迎留言^_^,您的建议是完善自我的动力!!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值