冒泡排序法及改进

Posted 超浪*牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冒泡排序法及改进相关的知识,希望对你有一定的参考价值。

  • 对n个数字组成的序列需要n-1趟冒泡排序;
  • 每一趟定位信息,都会确定一有序个记录;
  • 以此类推到最后直到最后会把所有的记录进有序数组当中;

1、从下标1开始计数排序

#include <stdio.h>
#include <stdlib.h>
void Bubble_Sort(int array[],int n){//多少个元素 
	int i,j,k,temp;
	for(i=1;i<=n-1;i++){//n个数字排序,只用进行n-1趟遍历 
		for(j=1;j<=n-i;j++){//从第一位开始遍历,直到最后一个尚未归位的数,n-i 
			if(array[j]>array[j+1]){
				temp = array[j];
				array[j] = array[j+1];
				array[j+1] = temp;
			}
		}
	} 
}
void DisPlay(int array[],int n){
	int i;
	for(i=0;i<=n;i++){
		printf("%d ",array[i]);
	}
	printf("\\n");
} 
int main() {
	int array[11] = {0,43,12,35,18,26,57,7,21,43,46};//数字从下标1开始 
	DisPlay(array,10);
	Bubble_Sort(array,10);
	DisPlay(array,10);
	return 0;
}

2、从下标0开始排序
思想是一致的,稍加思考便会想通

void Bubble_Sort(int array[],int n){//多少个元素 
	int i,j,k,temp;
	for(i=0;i<n-1;i++){//n个数字排序,只用进行n-1趟遍历 
		for(j=0;j<n-1-i;j++){//从第一位开始遍历,直到最后一个尚未归位的数,n-i 
			if(array[j]>array[j+1]){
				temp = array[j];
				array[j] = array[j+1];
				array[j+1] = temp;
			}
		}
	} 
}
void DisPlay(int array[],int n){//n为元素个数 
	int i;
	for(i=0;i<n;i++){
		printf("%d ",array[i]);
	}
	printf("\\n");
} 
int main() {
	int array[11] = {29,43,12,35,18,26,57,7,21,43,46};//数字从下标1开始 
	DisPlay(array,11);
	Bubble_Sort(array,11);
	DisPlay(array,11);
	return 0;
}

3、改进冒泡排序

  • 一旦发现某一趟没有进行交换操作,那么表明此时排序已经完成,不要在进行没有必要的冒泡排序。提前结束循环
void Bubble_Sort(int array[],int n){//多少个元素 
	int i,j,k,temp,exchange;
	for(i=1;i<=n-1;i++){//n个数字排序,只用进行n-1趟遍历 
		exchange = 0;
		for(j=1;j<=n-i;j++){//从第一位开始遍历,直到最后一个尚未归位的数,n-i 
			if(array[j]>array[j+1]){
				temp = array[j];
				array[j] = array[j+1];
				array[j+1] = temp;
				exchange = 1;
			}
		}
		if(exchange == 0){
			break;
		}
	} 
}

以上是关于冒泡排序法及改进的主要内容,如果未能解决你的问题,请参考以下文章

改进冒泡排序的运行时间分析

数据结构之--冒泡排序算法及改进

冒泡排序的改进:鸡尾酒排序

冒泡排序改进版(java)

交换排序 —— 冒泡排序 + 改进

冒泡排序的改进