1. 程式人生 > >Linux C++ 直接選擇排序,氣泡排序

Linux C++ 直接選擇排序,氣泡排序

選擇排序的思想是:每次從待排序中選擇最小(大)的元素插入已經排好的序列中。

/*直接選擇排序*/
#include <iostream>
using namespace std;

void swapp(int &a,int &b)
{
	int temp = a;
	a = b;
	b = temp;
}

int main()
{
	int a[]={5,4,10,20,12,3,2,1,3,5,6,56,43,32};
	int size = sizeof(a)/sizeof(int);   //計算陣列元素個數
	
	for(int i=0;i<size-1;i++)
	{
		int last = i;
		for(int j=i+1;j<size;j++)   //選擇後面最小元素
		{
			if(a[j] < a[last])
			{
				last = j;
			}
		}
		swapp(a[i],a[last]);//交換
	}
   
	//輸出
	for(int i=0;i<size;i++)
	{
		cout<<a[i]<<" ";
	}
   
   return 0;
}

執行結果: 

1 2 3 3 4 5 5 6 10 12 20 32 43 56 

 氣泡排序思想:比較相鄰連個元素大小,選擇最大(小)的排序

/*氣泡排序(for迴圈)*/
#include <iostream>
using namespace std;

void swapp(int &a,int &b)
{
	int temp = a;
	a = b;
	b = temp;
}

int main()
{
	int a[]={1,2,5,4,10,20,12,3,3,5,6,56,43,32};
	int size = sizeof(a)/sizeof(int);//計算陣列元素個數

	//for迴圈
	for(int i=0;i<size-1;i++)  //遍歷各個元素
	{			
		for(int j=0; j<size-i; j++)  //找出了最大(小)的一個
		{
			if(a[j+1] < a[j])
			swapp(a[j],a[j+1]); //交換最大(小)的一個			
		}		
	}  	
	//輸出
	for(int i=0; i<size; i++)
	{
		cout<<a[i]<<" ";
	}
   
   return 0;
}

 執行結果:

1 2 3 3 4 5 5 6 10 12 20 32 43 56
/*氣泡排序(while迴圈)*/
#include <iostream>
using namespace std;

void swapp(int &a,int &b)
{
	int temp = a;
	a = b;
	b = temp;
}

int main()
{
	int a[]={1,2,5,4,10,20,12,3,3,5,6,56,43,32};
	int size = sizeof(a)/sizeof(int);//計算陣列元素個數

	//while迴圈
	int loop = size-1;//最大迴圈次數
	while(loop>0) //
	{
		int lastExchangeIndex = 0; //標記本次交換最後一對元素的最小小標
		for(int i=0; i<loop; i++)
		{
			if(a[i+1] < a[i])
			{
				swapp(a[i],a[i+1]);
				lastExchangeIndex = i;
			}
		}
		loop = lastExchangeIndex;  //標記本次交換最後一對元素的最小小標
	}
	//輸出
	for(int i=0; i<size; i++)
	{
		cout<<a[i]<<" ";
	}
   
   return 0;
}

執行結果:

1 2 3 3 4 5 5 6 10 12 20 32 43 56