1. 选择排序
选择排序的核心思想就是:每遍历一次数组都选择出其中最大或者最小的数值,形成有序的数列。在排序过程中,数组中会存在一部分有序数列和一部分无序数列,所以在排序中,需要我们仅排无序数列部分即可,这样会一定程度上加快程序运行速度。平均的时间复杂度为O(n*n)。
#include<iostream>
using namespace std;
void choiceSort(int num[],int n)
{
int min;
for(int i=0;i<n-1;i++) //10个数只需要比较9次
{
min=i;
for(int j=i+1;j<n;j++) //前面的已经排好序,只比较后面的即可
{
if(num[min]>num[j]) //找出未排序中的最小值
{
min=j;
}
}
if(min!=i)//如果找到比之前小的值交换,否则不执行
{
int t=num[min];
num[min]=num[i];
num[i]=t;
}
}
}
int main()
{
int num[10]={4,1,11,44,5,8,3,9,10,70};
choiceSort(num,10);
for(int i=0;i<10;i++)
{
cout<<num[i]<<endl;
}
return 0;
}
2. 冒泡排序
选择排序的核心思想就是:依次比较相邻的两个数,将小数放在前面,大数放在后面。这样会形成一种数列大体有序的状态,会在一定程度上加快排序速率。当然,冒泡排序与选择排序有一个最大的相同点:每次遍历数组都会找出其中最大或者最小的数值。同时,我们每次进行排序都是针对数组中的无序部分。平均的时间复杂度与选择排序一样为O(n*n)。
#include<iostream>
using namespace std;
void bubble(int num[],int n)
{
int temp;
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-1-i;j++)//冒泡的过程中已使数组尾端有序,所以只需对前面的数排序即可
{
if(num[j]>num[j+1])//让小的数向前冒泡
{
temp=num[j];
num[j]=num[j+1];
num[j+1]=temp;
}
}
}
}
int main()
{
int num[10]={4,1,11,44,5,8,3,9,10,70};
bubble(num,10);
for(int i=0;i<10;i++)
{
cout<<num[i]<<endl;
}
return 0;
}