冒泡排序和选择排序
算法笔记
算法笔记及自我总结
提示:以下是本篇文章正文内容,下面案例可供参考
一、冒泡排序
C++版
#include<iostream>
using namespace std;
void BubbleSort(int* arr,int n)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < i; j++)
{
if (arr[i] < arr[j])
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
void Print(int *arr,int n)
{
cout << "排序后:" << endl;
for (int i = 0; i < n; i++)
{
cout << arr[i] << " ";
}
}
int main()
{
int n;
cin >> n;
int arr[] = { 5,3,2,4,0,1,6,9,7,8 };
BubbleSort(arr, n);
Print(arr, n);
system("pause");
return 0;
}
Python版
list = [0,3,5,6,4,8,9,2,1,7]
def Bubble_Sort(list):
for i in range(len(list)):
for j in range(i,len(list)):
if (list[i]>list[j]):
a = list[i]
list[i] = list[j]
list[j] = a
Bubble_Sort(list)
print('排序后:')
print(list)
二、选择排序
C++版
#include<iostream>
using namespace std;
void SelectSort(int *arr, int n)
{
for (int i = 0; i < n; i++)
{
for (int j = i; j < n; j++)
{
//先假设设置数组最小的数字的序号为min
int min = i;
/*
由于每次循环外循环遍历一个数,内循环遍历一整个
(例如:外循环i = 0时,内循环完成一整个循环j=0,1,2,3.....)
所以当内循环的序号数的数组值小于外循环的时,交换序号
(这一段的用意是找整个数组的最小值)
*/
if (arr[j] < arr[min])
{
min = j;
}
//当min不等于i时,调换数组的值(相当于把数组最小值调换到最左边)
if (min != i)
{
swap(arr[i], arr[min]);
}
}
}
}
void Print(int* arr, int n)
{
cout << "排序后:" << endl;
for (int i = 0; i < n; i++)
{
cout << arr[i] << " ";
}
}
int main()
{
int n,arr[20],temp;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> temp;
arr[i] = temp;
}
SelectSort(arr, n);
Print(arr, n);
system("pause");
return 0;
}
Python版
List = list(map(int,input("输入用空格分隔的数字:").split()))
# list = [0,3,5,6,4,8,9,2,1,7]
def Select_Sort(List):
for i in range(len(List)):
for j in range(i,len(List)):
min = i
if (List[j]<List[min]):
min = j
if (min != i):
a = List[i]
List[i] = List[j]
List[j] = a
Select_Sort(List)
print('排序后:')
print(List)
总结
冒泡排序没啥好讲的;选择排序:要注意排序方法和循环的运用,以及数组写入怎么用,还有一个C++中的swap函数:交换函数。
Swap函数
好处:不用担心交换变量精度的缺失,无需构造临时变量,不会增加空间复杂度
swap 包含在命名空间std 里面
swap(a,b);(交换两个数)
swap(a[i] = b[j]);(交换两个位置上的变量)