选择排序:先找最小值,然后交换位置。
#include<iostream>
using namespace std;
int SelectionSort(int a[], int size)
{
for(int i = 0; i < size - 1; ++ i)//最后一次不用比较
{
int tmpMin = i;//假设第i个数最小
for(int j = i; j < size; ++ j)//寻找未比较数中的最小值
{
if(a[j] < a[tmpMin])
tmpMin = j;
}
int tmp;//交换位置
tmp = a[tmpMin];
a[tmpMin] = a[i];
a[i] = tmp;
}
}
int main()
{
int n, a[10];
cin >> n;
for(int i = 0; i < n; ++ i)
cin >> a[i];
SelectionSort(a,n);
for(int i = 0; i < n; ++ i)
cout << a[i] << " ";
return 0;
}
选择排序(这种方法好一些)
插入排序:左边为有序部分,右边为无序部分。将无序部分的第一个数与有序部分比较,插入到有序部分中即可。
#include<iostream>
using namespace std;
int InsertSort(int a[], int size)
{
for(int i = 1; i < size; ++ i)//无序部分(让无序部分的每一个数分别与有序部分比较)
{
for(int j = 0; j < i; ++ j)//有序部分
{
if(a[i] < a[j])//如果发现无序部分的数小于有序部分的某个数
{
int tmp = a[i];//必须要这一步,否则后面这一步会改变a[i]的值
for(int k = i; k > j ; -- k)//将有序部分的这个数及其以后的数依次往后移
a[k] = a[k-1];
a[j] = tmp;
break;//变为有序序列后即可跳出循环
}
}
}
}
int main()
{
int n, a[10];
cin >> n;
for(int i = 0; i < n; ++ i)
cin >> a[i];
InsertSort(a,n);
for(int i = 0; i < n; ++ i)
cout << a[i] << " ";
return 0;
}
冒泡排序:整个数组都是无序序列,依次将相邻两个数比较,得到有序序列的第一个数(右边)
#include<iostream>
using namespace std;
void BubbleSort(int a[], int size)//从大到小排序
{
for(int i = 0; i < size - 1; ++ i)
{
for(int j = 0; j < size - i; ++ j)//j < size - i,无序部分(左)需要两两比较排序
{
if(a[j] < a[j + 1])
{
int tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
}
}
}
}
int main()
{
int n, a[10];
cin >> n;
for(int i = 0; i < n; ++ i)
cin >> a[i];
BubbleSort(a,n);
for(int i = 0; i < n; ++ i)
cout << a[i] << " ";
return 0;
}
#include<iostream>
using namespace std;
void BubbleSort(int a[], int size)
{
for(int i = size - 1; i > 0; -- i)
{
for(int j = 0; j < i; ++ j)//j < size - i,无序部分(左)需要两两比较排序
{
if(a[j] < a[j + 1])//改变大小于符号即可改变排序规则
{
int tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
}
}
}
}
int main()
{
int n, a[10];
cin >> n;
for(int i = 0; i < n; ++ i)
cin >> a[i];
BubbleSort(a,n);
for(int i = 0; i < n; ++ i)
cout << a[i] << " ";
return 0;
}
这两种写法都正确,但是自我比较倾向于第二种写法。两种写法主要还是影响第二个for循环的表达方式,第二个for循环主要是指无序序列的范围,无序序列中的元素需要两两比较来交换数据。
很详细的冒泡排序:https://www.cnblogs.com/ahalei/p/3563964.html