插入排序python和C++代码实现(拿出来新的项目插入到有序的序列中)

@插入排序python和C++代码实现(拿出来新的项目插入到有序的序列中)

插入排序主要实现的就是从已知列表中逐个取出一个项,然后插入到新的有序的列表中,使得新的列表最终是一个有序列表。

由于一直为找工作的笔试做准备,所以其中的输入是按照行的输入自动读取的,输入完一行数据通过Ctrl+D来结束输入,程序结束就会显示结果。

方法一:python标准方法(不需要额外的列表空间)

# 标准方法
# 该算法的优点就是不用额外的空间,只是在当前的列表中处理
import sys

def insert_sort(lists):
    count = len(lists)
    for i in range(1,count):
        key = lists[i]
        j = i-1
        while j >=0:
            if lists[j]>key:
                lists[j+1] = lists[j]
                lists[j]=key
            j -= 1
    return lists


if __name__ == '__main__':
    lines = sys.stdin.readlines()
    lists = lines[0].strip().split()
    print("排序前序列为:", )
    for i in lists:
        print(i, end=" ")
    print("\n排序后结果为:")
    for i in (insert_sort(lists)):
        print(i, end=" ")

方法二:C++标准方法(不需要额外的列表空间)

#include <iostream>
using namespace std;

void InsertSort(int *a, int n);

int main()
{
	int a[] = {5,4,9,2,6,1,8,3,7,0};
	for (int i=0;i<10;i++)
	{
		cout << a[i] << " ";
	}
	cout << endl;
	InsertSort(a,10);
	for (int i=0;i<10;i++)
	{
		cout << a[i] << " ";
	}
	cout << endl;
	system("pause");
	return 0;
}

void InsertSort(int *a, int n)
{
	for (int i = 1; i < n;i++)
	{
		int temp = a[i];
		int j = i-1;
		while(j >=0)
		{
			if (a[j] > temp)
			{
				a[j+1] = a[j];
				a[j] = temp;
			}
			else
			{
				break;		//continue和break的区别是continue是不执行本次循环以后的语句,
							//立即进行下一次的循环条件判定,可以理解为仅结束本次循环。
							//而break是直接结束循环体。
			}
			j--;
		}
	}
}

方法三:自己的方法(需要借助外部的列表空间)

# 自己的方法
# 该种方法需要额外的一个列表空间来存放已排好序的列表
import sys

def insert_sort(lists):
    arr = []
    for i in range(len(lists)):
        arr.append(lists[i])
        for j in range(len(arr)-1):
            if arr[-1] < arr[j]:
                arr[-1],arr[j] = arr[j],arr[-1]
    return arr


if __name__ == '__main__':
    lines = sys.stdin.readlines()
    lists = lines[0].strip().split()
    print("排序前序列为:", )
    for i in lists:
        print(i, end=" ")
    print("\n排序后结果为:")
    for i in (insert_sort(lists)):
        print(i, end=" ")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值