三种排序方式和折半查找

一.直接插入排序

基本思想:每一步将一个待排序元素按照其关键字值的大小插入到已排序序列的合适位置上,知道待排序元素插入完为止。

template<class T>
void insert_sort(T a[],int n){
	for(int i=0;i<n;i++){
		T temp=a[i];
		 int j=i;
		while(j>0&&temp<a[j-1]){
			a[j]=a[j-1];
			j--;
		}
		a[j]=temp;
	}
}

二:选择排序

基本思想:两两比较待排序序列中的元素,并交换不满足顺序要求的各对元素。

template<class T>
void my_swap(T& a, T& b) {
	T temp = a;
	a = b;
	b = temp;
}
template<class T>
void selectionSort(T a[], int n) {
	for (int i = 0; i < n; i++) {
		int least_index = i;
		for (int j = i + 1; j < n; j++) {
			if (a[j] < a[least_index])  //找到最小值
				least_index = j;
		}
		my_swap(a[i], a[least_index]);
	}
}

三:冒泡排序

基本思想:每一轮从待排序序列中找到一个最值(最大或者最小),然后将其和第i个位置的元素交换。

template<class T>
void my_swap(T& a, T& b) {
	T temp = a;
	a = b;
	b = temp;
}
template<class T>
void bubbleSort(T a[], int n) {
	int i=n-1;
	while(i>0){
		int least_index=0;
		for(int j=0;j<i;j++){
			if(a[j]>a[j+1]){
				my_swap(a[j],a[j+1]);
				least_index=j;//记录最后一次交换的下标,这个下标将用于下一组for循环的判断条件
			}
		}
		i=least_index;
	}
}

四:折半查找

//使用这个排序的前提是已经从小到大排好序,必须是从小到大,否则下面这个程序就得做出相应调整
template<class T>
int search(const T a[],int n,const T&key){
int low=0;
int high=n-1;
while(low<=high){
int mid=(low+high)/2;
if(key==a[mid]) {
	cout<<"元素的位置为:"<<mid+1<<endl;
	break;
}
else if(key<a[mid]) high=mid-1;
else 
   low=mid+1;
}
if(low>high) cout<<"您要查找的元素不存在"<<endl;
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱码蔡蔡子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值