排序算法(选择排序 冒泡排序 插入排序 希尔排序 )的运用 C++版本


#include <stdio.h>
#include <stdlib.h>


void swap(int* num1, int* num2) {
    
    
	int temp = *num1;
	*num1 = *num2;
	*num2 = temp;
}

void SelectSort1(int arr[], int len) {
    
    //选择排序
	for (int i = 0; i < len - 1; i++) {
    
    
		int max = 0;
		for (int j = 1; j < len - i; j++) {
    
    
			if (arr[j] > arr[max]) {
    
    
				max = j;
			}
		}
		if (max != (len - i - 1)) {
    
    
			swap(&arr[max], &arr[len - i - 1]);
		}
	}
}

void BubbleSort(int arr[], int len) {
    
    //冒泡排序
	for (int i = 0; i < len - 1; i++) {
    
    
		bool sorted = true;
		for (int j = 0; j < len - 1 - i; j++) {
    
    
			if (arr[j] > arr[j + 1]) {
    
    
				swap(&arr[j], &arr[j + 1]);
				sorted = false;
			}
		}
		if (sorted) break;
	}
}

void InsertSort(int arr[], int len) {
    
    //插入排序
	int preIndex = 0, current = 0;

	for (int i = 1; i < len; i++) {
    
    
		preIndex = i - 1;
		current = arr[i];
		while (preIndex >= 0 && arr[preIndex] > current) {
    
    
			arr[preIndex + 1] = arr[preIndex];
			preIndex--;
		}
		arr[preIndex + 1] = current;
	}

}

void ShellSort(int arr[], int len) {
    
    //希尔排序,用的很少
	int gap = len / 2;
	for (; gap > 0; gap = gap / 2) {
    
    
		for (int i = gap; i < len; i++) {
    
    
			int current = arr[i];
			int j = 0;
			for (j = i - gap; j >= 0 && arr[j] > current; j -= gap) {
    
    
				arr[j + gap] = arr[j];
			}
			arr[j + gap] = current;
		}

	}

}

int main(void) {
    
    
	int max = 0;
	int beauties[] = {
    
     163, 161, 158, 165, 171, 170, 163, 1, 2 };
	int len = sizeof(beauties) / sizeof(beauties[0]);
	ShellSort(beauties, len);
	//BubbleSort(beauties, len);
	 
	for (int i = 0; i < len; i++) {
    
    
		printf("%d ", beauties[i]);
	}
}

在这里插入图片描述
所有排序都正常运行

猜你喜欢

转载自blog.csdn.net/m0_46376834/article/details/115186880
今日推荐