1. 程式人生 > >[排序] 1 內部排序-總結

[排序] 1 內部排序-總結

在這裡插入圖片描述

直接插入排序

void InsertSort(int arr[], int n) {
	int tmp, i, j;
	for (i=1; i<n; ++i) {
		tmp = arr[i];
		j=i-1;
		while (j>=0 && tmp<arr[j] ) {
			arr[j+1] = arr[j];
			--j;
		}
		arr[j+1] = temp;
	}
}

希爾排序

void ShellSort(int arr[], int n) {
	int temp,i,j;
	int gap;
	for (gap=n/2; gap>
0; gap/=2) { for (i=gap; i<n; ++i) { temp = arr[i]; int j; for (j=i; j>=gap && arr[j-gap]>temp; j-=gap) { arr[j] = arr[j-gap]; } arr[j] = temp; } } }

簡單選擇排序

void SelectSort(int arr[], int n) {
	int i,j,k;
	int temp;
	for (i=0; i<n; i++) {
		k =i;
		for (j=i+
1; j<n; ++j) { if (arr[k] > arr[j]) k =j; } temp = arr[i]; arr[i] = arr[k]; arr[k] = temp; } }

堆排序

用堆來選擇最大最小的關鍵字,再插入

氣泡排序

每一次把最大的關鍵字移到了最右邊,像氣泡從水底冒到了水面一樣

void BubleSort(int arr[], int n) {
	int i,j,flag;
	int tmp;
	for (i=n-1; i>=1; --i) {
		flag = 0;
		for (j=1; j<=i; ++j)
{ if (arr[j-1] > arr[j] ) { tmp = arr[j]; arr[j] = arr[j-1]; arr[j-1] = temp; flag = 1; } } if (flag ==0 ) return ; } }

快速排序

//low,high 當前子序列的範圍
void QuickSort(int arr[], int low, int high) {
	int temp;
	int i = low, j=high;
	if (low<high) {
		temp = arr[low];
		while (i<j) {
			//滿足條件的情況下,將j往前移動
			while (j>i && arr[j]>=temp) --j;
			//把比tmp小的關鍵字賦值到i
			if (i<j) {
				arr[i] = arr[j];
				++i;
			}
			//滿足條件的情況下,將i後移
			while (i<j && arr[i]<temp) ++i;
			//把 比tmp大的i 賦值到j上
			if (i<j) {
				arr[j] = arr[i];
				--j;
			}
		}
		arr[i] = tmp;
		QuickSort(arr, low, i-1);
		QuickSort(arr, i+1, high);
	}
}

歸併排序

基數排序