class-notes/冒泡、选择、插入排序.md
2025-04-03 10:46:38 +08:00

1.5 KiB

冒泡排序

#include <stdio.h>

void bubblingSort(int *a, int n, int flag){
	int i, j, t;
	for(i=0;i<n-1;i++){
		for(j=0;j<n-1-i;j++){
			if(flag>0?a[j]>a[j+1]:a[j]<a[j+1]){
				t = a[j];
				a[j] = a[j+1];
				a[j+1] = t;
			}
		}
	}
}

void printArray(int *a, int n){
	int i;
	for(i=0;i<n;i++){
		printf("%d ", a[i]);
	}
	printf("\n");
}

int main(){
	int a[] = {100, 1, 3, 2, 9, -1, 20, 30, 10, 50};
	int n = sizeof(a)/4;
	bubblingSort(a, n, 1);
	printArray(a, n);

	return 0;
}

选择排序

#include <stdio.h>

void selectSort(int *a, int n, int flag){
	int i, j, t;
	for(i=0;i<n-1;i++){
		for(j=i;j<n;j++){
			if(flag > 0?a[i] > a[j]:a[i] < a[j]){
				t = a[i];
				a[i] = a[j];
				a[j] = t;
			}
		}
	}
}

void printArray(int *a, int n){
	int i;
	for(i=0;i<n;i++){
		printf("%d ", a[i]);
	}
	printf("\n");
}

int main(){
	int a[] = {100, 1, 3, 2, 9, -1, 20, 30, 10, 50};
	int n = sizeof(a)/4;
	selectSort(a, n, 0);
	printArray(a, n);

	return 0;
}

插入排序

#include <stdio.h>

void insertSort(int *a, int n, int flag){
	int i, j, t;
	for(i=1;i<n;i++){//假设前i位已经有序 
		t = a[i];//备份当前需要排序的数 
		j=i-1;//计算出当前位置前一项 
		while((flag>0?a[j] > t:a[j] < t) && j>=0) {
			a[j+1] = a[j];
			j--;
		}
		a[j+1] = t;
	}
}

void printArray(int *a, int n){
	int i;
	for(i=0;i<n;i++){
		printf("%d ", a[i]);
	}
	printf("\n");
}

int main(){
	int a[] = {100, 1, 3, 2, 9, -1, 20, 30, 10, 50};
	int n = sizeof(a)/4;
	insertSort(a, n, 0);
	printArray(a, n);

	return 0;
}