C语言实现冒泡排序

103 阅读1分钟

冒泡排序的思想是 1:每次排序将最大的值,移动到最后一位 2:每次排序一次后,末尾的就不用再次排序了 3:加上一个flag进行优化,如果本生就是有序的,直接跳出循环

时间复杂度: 有序数组:O(n) 无序数组: O(n^)

空间复杂度 O(1)

void BubbleSort(int* nums, int numsSize)
{
	int i,j;
	for(i = numsSize-1;i>=0;i--) {
		// 优化,假如数组本生就是有序的 
		int flag = 0;
		for(j=0;j<i;j++) {
			if(nums[j] > nums[j+1]) {
				flag = 1;
				swap(&nums[j],&nums[j+1]);
				//int temp = nums[j];
				//nums[j] = nums[j+1];
				//nums[j+1] = temp;
			}
		}
		if(flag == 0) {
			break;
		}
	}
}

void swap(int* a,int* b) {
        // a是一个指针,*a就只这个指针对应的值
	int t = *a;
	*a = *b;
	*b = t;
}

int main() {
	int x;
	int num[] = {5,4,3,2,1};	
	BubbleSort(num,5);
	for(x=0;x<5;x++) {
		printf("index=%d,value=%d\n",x,num[x]);
	} 
	return 0;
}