八大排序演算法(1)_氣泡排序和選擇排序

YunShell發表於2013-08-29
/************************************************************************/
/* @author lynnbest
排序複習:升序
1.冒泡
	兩個相鄰依次比較交換,將最大的沉到最右邊
	兩層尋壞,第一層控制比較次數,第二層控制遍歷比較順序
2.選擇         
	從所有的位挑出最小的賦值給第0位
   然後從剩下的當中,在選擇最小的賦給第1個
依次 也就是找位置 在交換
                                                           */
/************************************************************************/

#include <stdio.h>

void printfarray(int *a,int len);
void ascendsort_bubble(int *a,int n);
void acsendsort_choice(int *a,int n);

int main()
{	
	int a[]={6,8,4,3,2,1};
	int len=sizeof(a)/sizeof(a[0]);
	printf("排序前:\n");
	printfarray(a,len);
	ascendsort_bubble(a,len);
//	acsendsort_choice(a,len);
	printf("排序後:\n");
	printfarray(a,len);
	return 0;
}

void printfarray(int *a,int len)
{
	for(int i=0;i<len;i++)	
		printf("%3d",a[i]);
	printf("\n");
}

void ascendsort_bubble(int *a,int n) //冒泡升序
{	
	int temp;
	for(int i=0;i<n-1;i++)
		for(int j=0;j<n-1-i;j++)
		{
			if(a[j]>a[j+1])
			{
				temp=a[j];
				a[j]=a[j+1];
				a[j+1]=temp;
			}
		}
}

void acsendsort_choice(int *a,int n) //選擇升序
{
	int min,temp;
	for(int i=0;i<n;i++)
	{
		min=i;
		for(int j=i;j<n;j++) //這個迴圈就是在找最小的 位置
			if(a[min]>a[j])
				min=j;
		
		temp=a[min];	//將找到的最小和對應位置 交換
		a[min]=a[i];
		a[i]=temp;	

	}
}


相關文章