排序

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;
}

 运行结果

 

 

 

posted @ 2019-11-13 15:26  C_hp  阅读(179)  评论(0)    收藏  举报