排序算法

常见的排序算法

交换两变量的值swap函数

void swap(int *a,int *b){
	if(a == b) return; //当两指针指向同一地址时,*a = *a^*a; 1^1==0 ,异或本身为0
	//if(*a == *b) return;
	*a ^= *b;		//所有就有这样的疑惑,不同地址但地址所存数值相同,进行以下异或操作也能交换,若*a=1,*b=1,经过26line异或操作*a=0
	*b ^= *a;		//*b = 1^0,执行该行后,*b=1
	*a ^= *b;    	//*a = 0^1,执行改行后,*a=1,所以若两值相同可以不必要经过异或操作(不是不行,单没必要),加一条判断即25line

}

1.冒泡排序(BubbleSort)

冒泡排序实现:

/**
 * 从小到大,冒泡排序
 */
void bubble_sort(int arr[],int len){
	for(int i = 0; i < len -1; i++){  //循环冒泡次数为len-1
		for(int j = 0; j < len-1-i; j++){ //最多交换次数len-1次,每次循环冒泡一个数减少1次交换次数
			if(arr[j]>arr[j+1]) swap(&arr[j],&arr[j+1]);
		}
	}
}

2.选择排序

插入排序实现:

/**
 * 从小到大,选择排序
 */
void select_sort(int arr[],int len){
	for(int i = 0; i < len-1; i++){ //选择最小沉淀到arr[i]
		int min = i;
		int j;
		for(j=i+1; j < len; j++){
			if(arr[j] < arr[min])
				min = j;
		}
		swap(&arr[min],&arr[i]);
	}
}

3.插入排序

                               

插入排序:

/**
 * 插入排序,实现从小到大排序
 * 在已排序序列中从后向前扫描,找到相应位置并插入。用零时变量存储插入的元素
 */
void insert_sort(int arr[],int len){
	int i,j,temp;
	for(i = 1; i < len; i++){//从第二个元素开始insert已排序的序列(该序列暂时只有第一元素)
		temp = arr[i]; // 将temp指向第二个元素
		/**
		 *j为当前临时temp的索引,判断当前temp所指元素是否小于前一元素
		 *若temp小于前一元素则后移一位,跳出循环时,j为最后移动过的元素且,该索引前一元素小于或等于temp所指要insert元素
		 */
		for(j = i; j > 0 && arr[j-1] > temp; j--){
			arr[j] = arr[j-1];
		}
		arr[j] = temp;
	}
}


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值