常见排序算法(Python和C++)
一、比较类
1.冒泡排序
python:
lst=[1,5,6,1,7]
#一共n-1趟
for i in range(len(lst)-1,0,-1):
#每趟需要检查进行交换的位置:如第一趟时0~n-2下标
for j in range(i):
if lst[j]>lst[j+1]:
lst[j],lst[j+1]=lst[j+1],lst[j]
print(lst)
C++:
#include<iostream>
using namespace std;
int main()
{
int a[5] = { 1,5,6,1,7 };
int i, j, tmp,length;
length = sizeof(a) / sizeof(a[0]);
for (i=0; i < length ; i++)
{
cout << a[i] << ' ';
}
for (i=0; i <length-1; i++)
{
for (j = 0; j < length - 1 - i; j++)
{
if (a[j] > a[j + 1])
{
tmp = a[j];
a[j] = a[j + 1];
a[j + 1] = tmp;
}
}
}
cout << endl;
for (i=0; i < length ; i++)
{
cout << a[i] << ' ';
}
system("pause");
return 0;
}
2.选择排序
python:
#记录最小值的索引,每趟遍历结束进行一次交换
for i in range(len(lst)-1):
index = i
for j in range(i+1,len(lst)):
if lst[index]>lst[j]:
index=j
lst[i],lst[index]=lst[index],lst[i]
C++:
//进行n-1次交换
for (i = 0; i < length - 1; i++)
{
//记录i处索引,记此处值为初始最小值
min_index = i;
//重点:从每趟从i+1下标开始到n-1
for (j = i+1; j< length; j++)
{
if (a[min_index] > a[j])
{
min_index = j;
}
}
tmp = a[i];
a[i] = a[min_index];
a[min_index] = tmp;
}
3.插入排序
python:
for i in range(1,len(lst)):
#记录需要插入的数据与索引
currentval=lst[i]
index=i
while lst[index-1]>currentval and index>=1:
lst[index]=lst[index-1]
index-=1
#只插入一次——与冒泡算法区别每趟比较后都需要交换
lst[index]=currentval
C++:
for (i = 1; i < length ; i++)
{
currentval = a[i];
index = i;
//跳出循环条件:1.比较值<插入值;2.插入值索引<1
while (index>0&&a[index-1]>currentval)
{
a[index] = a[index - 1];
index -= 1;
}
a[index] = currentval;
}