排序
1.冒泡排序
将一个数组按从小到大升序排序,每次遍历将当前乱序的最大数值交换到最后。
例:
4 5 3 9 0 32 -4
第一次遍历后
4 3 5 0 9 -4 32
二次遍历后
3 4 0 5 -4 9 32
三次
3 0 4 -4 5 9 32
四次
0 3 -4 4 5 9 32
五次
0 -4 3 4 5 9 32
六次
-4 0 3 4 5 9 32
七次
-4 0 3 4 5 9 32
C++代码如下
#include<iostream>
using namespace std;
bool func(int *p, int size)
{
int tmp = 0;
for(int i=0; i<size; ++i)
{
for(int j=0; j<size-i-1; ++j)
{
if(p[j]>p[j+1])
{
tmp = p[j+1];
p[j+1] = p[j];
p[j] = tmp;
}
}
for(int i=0; i<size; ++i)//这两行只是对每次遍历后的展示,可去除
cout<<p[i]<<" ";
cout<<endl;
}
return true;
}
int main()
{
int p[] = {4,5,3,9,0,32,-4};
int size = sizeof(p)/sizeof(p[0]);
func(p, size);
for(int i=0; i<sizeof(p)/sizeof(p[0]); ++i)
cout<<p[i]<<" ";
cout<<endl;
return 0;
}
运行结果

2.选择排序
选择排序和冒泡排序有点类似,即认为最后一个元素为最大值,然后从头到后将元素与最后一个比较,发现最后一个不是最大就交换
例:1 345 -1223 45 9 324 0
一次遍历后
0 1 -1223 45 9 324 345
二次
0 1 -1223 45 9 324 345
三次
0 1 -1223 9 45 324 345
四次
0 1 -1223 9 45 324 345
五次
-1223 0 1 9 45 324 345
六次
-1223 0 1 9 45 324 345
C++代码
#include<iostream>
using namespace std;
bool func(int *p, int size)
{
int tmp = 0;
for(int i=size-1; i>0; --i)
{
for(int j=0; j<i; ++j)
{
if(p[i]<p[j])
{
tmp = p[j];
p[j] = p[i];
p[i] = tmp;
}
}
for(int i=0; i<size; ++i)
cout<<p[i]<<" ";
cout<<endl;
}
}
int main()
{
int p[] = {1,345,-1223,45,9,324,0};
int size = sizeof(p)/sizeof(p[0]);
func(p, size);
for(int i=0; i<size; ++i)
cout<<p[i]<<" ";
cout<<endl;
return 0;
}
运行效果

3.插入排序
这个比前俩稍稍复杂一点,它是通过在数组内建立好一个顺序表,然后将后面的元素插入表内(表部分元素要后移),遍历所有元素后成功排序
例:1 345 -1223 45 9 324 0
一次遍历后
1 345 -1223 5 9 324 0 //前两个元素就构成了有序表
第二次
-1223 1 345 45 9 324 0 //-1223进入表以后被放在第一位,后两个元素往后移,这时候前三个元素构成有序表
第三次
-1223 1 45 345 9 324 0
第四次
-1223 1 9 45 345 324 0
第五次
-1223 1 9 45 324 345 0
第六次
-1223 0 1 9 45 324 345
C++代码
#include<iostream>
using namespace std;
bool func(int *p, int size)
{
int tmp;
for(int i=0; i<size-1; ++i)
{
if(p[i]>p[i+1])
{
for(int j=0; j<=i; ++j)
{
if(p[i+1]<p[j])
{
tmp = p[i+1];
int q = i+1-j, o = i;
while(q)
{
p[o+1] = p[o];
--o;
--q;
}
p[j] = tmp;
}
}
}
for(int i=0; i<size; ++i)
cout<<p[i]<<" ";
cout<<endl;
}
}
int main()
{
int p[] = {1,345,-1223,45,9,324,0};
int size = sizeof(p)/sizeof(p[0]);
func(p, size);
for(int i=0; i<size; ++i)
cout<<p[i]<<" ";
cout<<endl;
return 0;
}
运行结果


浙公网安备 33010602011771号