1. 程式人生 > >過載實現:int char二分查詢. 函式模板 :對整型 浮點型 字元型 實現氣泡排序

過載實現:int char二分查詢. 函式模板 :對整型 浮點型 字元型 實現氣泡排序

程式:演算法+資料
C++語言的資料:
  1、基本型別: 整型,浮點型,字元型,bool型別
  2、變數:此塊空間的內容可改變
        型別 變數名;//分配空間:以型別
      初始化變數:在定義變數同時賦初值
      引用:通過名字引用變數的內容
     整型變數:
        型別 變數名;
     常量:(空間不能改)不可以改變的量
        整型常量 :  
          十進位制199    (權10  每一位[0 9])    
          八進位制: 0100 (權8 ,每一位[0,7])  
           十六進位制:0x12 (權16 每一位[0,...,9,a,b,c,d,e,f)  
  3、運算子:
    1、插入流  <<
    2、輸入流  >>
  4、作用域:能被引用的區間
     區域性變數:在函式內定義的變數
        作用域:在函式內
     全域性變數:在函式外定義的變數
    注:區域性變數優先
    
  5、引用作用域的內容:
      空間名::變數名;
  6、指標:就是空間在記憶體所在空間的地址編號
     指標變數:存放指標的變數
  7、取別名:給變數名取別名  
         規則:  型別名&  別名=變數;  
        int a=100;
  8、過載:C++允許同名的函式,呼叫函式時由函式與形參共同來決定呼叫。
        C語言規定:同一作用域下不允許出現同名現象(函式名、變數)
            呼叫函式:函式名和形參

        注:1、typedef只能對型別取別名  typedef int Intgerr
        2、取別名一定要指向
   9、函式模板
        在同族函式內,過程一致,只是資料不一致。將函式定義定義為一個通用的模型。
    template<typename T>  或 template<class T>
    T add(T a,T b)
    {
    
    }

#include<iostream>
using namespace std;

//判斷一個字元是否存在一個字串中
//折半(二分)查詢:整型陣列
short finder(int buf[],int ilen,int key)
{
	int mid=0;
	int left=0,right=ilen-1;
	
	while(left<=right)
	{
		mid=(left+right)/2;
		if(buf[mid]>key)
			right=mid-1;
		else if(buf[mid]<key)
			left=mid+1;
		else
			return mid;
	}
}

short finder(char buf[],int ilen,int key)
{
	int mid=0;
	int left=0,right=ilen-1;
	
	while(left<=right)
	{
		mid=(left+right)/2;
		if(buf[mid]>key)
			right=mid-1;
		else if(buf[mid]<key)
			left=mid+1;
		else	
			return mid;
	}
}

//對整型 浮點型 字元型 實現氣泡排序
template<typename T>
T finder(T ilen,T temp)
{
	int i,j;
	int buf[100]={1,2,5,4,3,8,7};
	for(i=0;i<ilen;i++)
	{
		j=i;
		for(j=i+1;j<ilen;j++)
		{
			if(buf[i]<buf[j])
			{
				temp=buf[j];
				buf[j]=buf[i];
				buf[i]=temp;
			}
		}
	}
	for(i=0;i<ilen;i++)
	{
		cout<<buf[i]<<" ";
	}	
	cout<<endl;

}


short finder(float buf[],int ilen)
{
	int i,j;
	double temp;
	for(i=0;i<ilen;i++)
	{
		j=i;
		for(j=i+1;j<ilen;j++)
		{
			if(buf[i]<buf[j])
			{
				temp=buf[j];
				buf[j]=buf[i];
				buf[i]=temp;
			}
		}
	}
	for(i=0;i<ilen;i++)
	{
		cout<<buf[i]<<" ";
	}	
	cout<<endl;
}

short finder(char buf[],int ilen)
{
	int i,j;
	char temp;
	for(i=0;i<ilen;i++)
	{
		j=i;
		for(j=i+1;j<ilen;j++)
		{
			if(buf[i]<buf[j])
			{
				temp=buf[j];
				buf[j]=buf[i];
				buf[i]=temp;
			}
		}
	}
	for(i=0;i<ilen;i++)
	{
		cout<<buf[i]<<" ";
	}	
	cout<<endl;
}

int main()
{
	char buf[100]="abcdefg";
	float buf2[100]={1.2,2.5,6.7,4.6,8.4,3.5};
	char buf3[100]="adghctsg";

//	cout<<finder(buf1,7,8)<<endl;
//	cout<<finder(buf,7,'c')<<endl;
	finder(7,0);
//	finder(buf2,6);
//	finder(buf3,8);
	return 0;
}



work: 過載 選擇排序

#include<iostream>
#include<string.h>
using namespace std;

//過載:在同一作用域下允許同名函式
template<typename T>
void swap(T* a,T* b)
{
	T temp;
	temp=*a;
	*a=*b;
	*b=temp;
}

template<typename T>
void selectsort(T buf[],int ilen)
{
//選擇排序:每一次從未排序中選擇最值(監哨值),並依次存放
	int listen;
	int i=0,j;
	for(i=0;i<ilen-1;i++)
	{
		listen=i;
		for(j=i+1;j<ilen;j++)
		{
			if(buf[j]>buf[listen])
				listen=j;
		}
		if(i!=listen)//listen=9
		{
			swap(buf+i,buf+listen);
		}
	}

}

int main()
{
	char buf[100]="qzadfdgtggetrvjtr";
	selectsort(buf,strlen(buf));
	cout<<buf<<endl;
	return 0;

}