@插入排序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=" ")