C語言_資料結構和演算法之_排序和查詢

魚弦發表於2016-09-27


C語言之排序基礎

排序

1、排序

冒泡


選擇法 排序
程式碼:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


void paixu_xuanze(int puke[],int count);
int main()
{


	int puke[]={9,6,3,5,2,4,7};  //2 6 3 5 9 
	paixu_xuanze(puke,7);


	for(int i=0;i<7;i++)
	{
		printf("%d\t",puke[i]);
	}
	return 0;
}


void paixu_xuanze(int puke[],int count)
{
	int min_xuhao;
	int temp;
	int i;
	
	for(int j=0;j<count-1;j++)
	{
		min_xuhao=j;			//0--3
		for(i=j+1;i<count;i++)		//1--4
		{
			if(puke[min_xuhao]>puke[i])			//1---4
			{
				min_xuhao=i;
			}
			else
			{
				
			}
		}
		if(min_xuhao!=j)				//0--3
		{
			temp=puke[min_xuhao];
			puke[min_xuhao]=puke[j];
			puke[j]=temp;
		}


	}








	return;
}




插入法排序




9,6,3,5,2,4,7


9,6,3,5,2,4,7
6 9 3 5 2 4 7
6 3 9 5 2 4 7
3 6 9 5 2 4 7
3 5 6 9 2 4 7
2 3 5 6 9 4 7
2 3 4 5 6 9 7 
2 3 4 5 6 7 9




程式碼:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


void paixu_charu(int puke[],int count)
{
	int min_xuhao=0;
	int temp;
	if(puke[0]>puke[1])
	{
		temp=puke[1];
		puke[1]=puke[0];
		puke[0]=temp;
	}
	else
	{
		;
	}




	if(puke[1]>puke[2])
	{
		temp=puke[2];
		puke[2]=puke[1];
		puke[1]=temp;
	}
	else
	{
		;
	}


	if(puke[0]>puke[1])
	{
		temp=puke[1];
		puke[1]=puke[0];
		puke[0]=temp;
	}
	else
	{
	;
	}






	return;
}




int main()
{


	int puke[]={9,6,3,5,2,4,7};  //2 6 3 5 9 
	paixu_charu(puke,7);


	for(int i=0;i<7;i++)
	{
		printf("%d\t",puke[i]);
	}
	return 0;
}




//完善後的插入排序演算法 程式碼:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


void paixu_charu(int puke[],int count)
{
	int temp;
	int i;
	int j;	
	for(j=0;j<4;j++)
	{
		for(i=j;i>=0;i--)			//0-3
		{
			if(puke[i]>puke[i+1])			//0--1   //1--2  0--1
			{
				temp=puke[i+1];
				puke[i+1]=puke[i];
				puke[i]=temp;			
			}
			else
			{
				break;
			}			
		}
	}	
	return;
}






int main()
{	
	int puke[]={9,6,3,5,2}; //3 6 9 5 2
	paixu_charu(puke,5);
	
	for(int i=0;i<5;i++)
	{
		printf("%d\t",puke[i]);
	}
	return 0;
}






查詢:
順序查詢
二分查詢--------


3  6  9  23  56 


找 23,如果找到,請返回下標;如果沒找到,返回-1


程式碼:----還需要完善的程式碼
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int find_binarySearch(int puke[],int count,int data)
{
	int pos=-1;
	int low=0;
	int hign=count-1;
	int mid=(low+hign)/2;


	if(data==puke[mid])
	{
		pos=mid;
	}
	else if(data<puke[mid])
	{
		pos=find_binarySearch(puke+low,mid,data);
	}
	else
	{
		int temp=find_binarySearch(puke+mid+1,count-mid-1,data);
		pos=temp+mid+1;
	}




	return pos;
}






int main()
{
	
	int puke[]={3,6,9,23,56}; 
	int pos=find_binarySearch(puke,5,57);
	printf("%d\n",pos);
	return 0;
}


//完善後的二分法查詢
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int find_binarySearch(int puke[],int count,int data)
{
	if(count<1)
	{
		return -1;
	}
	int pos=-1;
	int low=0;
	int hign=count-1;
	int mid=(low+hign)/2;


	if(data==puke[mid])
	{
		pos=mid;
	}
	else if(data<puke[mid])
	{
		pos=find_binarySearch(puke+low,mid,data);
	}
	else
	{
		int temp=find_binarySearch(puke+mid+1,count-mid-1,data);
		if(temp!=-1)
		{
			pos=temp+mid+1;
		}
	}
	
	
	return pos;
}






int main()
{
	
	int puke[]={3,6,9,23,56}; 
	int pos=find_binarySearch(puke,5,56);
	printf("%d\n",pos);
	return 0;
}























相關文章