一行用数组储存的数据:
7 6 5 4 3 2 1
int a[7]={7 , 6 , 5 , 4 , 3 , 2 , 1}
将其从小到大排序
冒泡排序
冒泡排序的思路就是相邻两个数据进行比较排序
原数组:7 6 5 4 3 2 1
第一次:
将a[0]=7和a[1]=6比较,7>6,将7和6交换顺序,得:6 7 5 4 3 2 1
将a[1]=7和a[2]=5比较,7>5,将7和5交换顺序,得:6 5 7 4 3 2 1
将a[2]=7和a[3]=4比较,7>4,将7和4交换顺序,得:6 5 4 7 3 2 1
将a[3]=7和a[4]=3比较,7>3,将7和3交换顺序,得:6 5 4 3 7 2 1
将a[4]=7和a[5]=2比较,7>2,将7和2交换顺序,得:6 5 4 3 2 7 1
将a[5]=7和a[6]=5比较,7>1,将7和1交换顺序,得:6 5 4 3 2 1 7
这一次将7正确排到它的位置。
接下来同理,重复上述过程,将6,5,4,3,2正确地排到它们的位置。
C++代码如下
void bubble(int* a,int n)//a为数组名,n为数组大小
{
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-1-i;j++)
{
if(a[j]>a[j+1])
{
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
插入排序
插入排序的思路就是将一个数与已经排好的数组进行比较排序,确定这个数插在哪里
原数组:7 6 5 4 3 2 1
取7放进数组中,现在数组为: 7
取6与已经排好的数组进行比较,6<7,现在数组为: 6 7
取5与已经排好的数组进行比较(从右往左),5<7,所以5放在7前面;再将5和6比较,5<6,所以5放在6前面,现在数组为: 5 6 7
取4与已经排好的数组进行比较(从右往左),4<7,所以4放在7前面;再将4和6比较,4<6,所以4放在6前面;再将4和5比较,4<5,所以4放在5前面,现在数组为:4 5 6 7
……
重复上述过程,将3,2,1正确排序
C++代码如下
void insert(int* a,int n)//a为数组名,n为数组大小
{
int* temp = new int[7];
temp[0] = a[0];
for (int i = 1; i < n ; i++)
{
for (int j = i - 1; j >= 0; j--)
{
if (a[i] < temp[j])
{
temp[j + 1] = temp[j];
temp[j] = a[i];
}
}
}
for (int i = 0; i < 7; i++)
{
cout << temp[i];
}
}
如果不想新建一个数组的话,可以参照下列代码
void insert(int* a,int n)
{
for(int i=1;i<n;i++)
{
int temp=a[i];
int j=i-1;
while(j>=0&&a[i]<a[j])
{
a[j+1]=a[j];
j--;
}
a[j]=temp;
}
}
选择排序
选择排序的思路将一个数与所有的数据比较,确定它的位置并进行交换
原数组:7 6 5 4 3 2 1
第一次:
将7与6进行比较,7>6,继续;将7与5进行比较,7>5,继续;……直到找到一个数大于7或者比到末位才结束,将结束比较的那位数和7进行交换
接下来将6,5,4,3,2,1重复上述过程
C++代码如下
void select(int* a,int n)
{
for(int i=0;i<n;i++)
{
int temp=i;
for(int j=i+1;j<n;j++)
{
if(a[j]<a[i])
temp=j;
}
swap(a[i],a[temp]);//交换两个数据
}
}