0
点赞
收藏
分享

微信扫一扫

2、顶点着色器之视图矩阵

目录

一、排序总结

二、插入的排序

三、交换的排序

四、选择的排序

五、归并排序

六、基数排序

七、计数排序(空缺) 

八、排序代码 

1、插入的排序

2、交换的排序

3、选择的排序

4、归并排序

5、计数排序


一、排序总结

排序最好时间平均时间最坏时间空间复杂度
插入排序O(n)O(n*n)O(n*n)O(1)
冒泡排序O(n)O(n*n)O(n*n)O(1)
选择排序O(n*n)O(n*n)O(n*n)O(1)
希尔排序O(n^1.3)O(1)
快速排序O(n*lgn)O(n*lgn)O(n*n)O(lgn)
堆排序O(n*lgn)O(n*lgn)O(n*lgn)O(1)
归并排序O(n*lgn)O(n*lgn)O(n*lgn)O(n)
基数排序O(d(n+r))O(d(n+r))O(d(n+r))O(r)

二、插入的排序

三、交换的排序

#include <iostream>  
using namespace std;   

int partition(int a[], int left, int right) {  
    int pivot = a[left];  
    while (left < right) {  
        while (left < right && a[right] >= pivot) right--;  
        a[left] = a[right];  
        while (left < right && a[left] <= pivot) left++;  
        a[right] = a[left];  
    }  
    a[left] = pivot;  
    return left;  
}  
void quickSort(int a[], int left, int right) {  
    if (left < right) {  
        int pivotIndex = partition(a, left, right);  
        quickSort(a, left, pivotIndex - 1);  
        quickSort(a, pivotIndex + 1, right);  
    }  
}  
int main() {  
    int a[] = {64, 34, 25, 12, 22, 11, 90};  
    int n = sizeof(a) / sizeof(a[0]);  
    quickSort(a, 0, n - 1);  
    for (int i = 0; i < n; i++) {  
        printf("%d ", a[i]);  
    }  
    printf("\n");  
    return 0;  
}

四、选择的排序

#include <iostream>  
using namespace std;  
void swap(int &a, int &b) {  
    int temp = a;  
    a = b;  
    b = temp;  
}  
void HeapAdjust(int a[], int n, int i) {//调整堆  
    int max = i;  
    int lchild = 2 * i + 1; // 左孩子  
    int rchild = 2 * i + 2; // 右孩子  
    if (lchild < n && a[lchild] > a[max])  max = lchild;  
    if (rchild < n && a[rchild] > a[max])  max = rchild;  
    if (max != i) {  
        swap(a[max], a[i]);  
        HeapAdjust(a, n, max);  
    }  
}  
void HeapSort(int a[], int n) {// 堆排序    
    for (int i = n / 2 - 1; i >= 0; i--) {  
        HeapAdjust(a, n, i);  
    }  
    for (int i = n - 1; i > 0; i--) {  
        swap(a[0], a[i]);  
        HeapAdjust(a, i, 0);  
    }  
}  
int main() {  
    int a[] = {64, 34, 25, 12, 22, 11, 90};  
    int n = sizeof(a) / sizeof(a[0]);  
    HeapSort(a, n);  
    for (int i = 0; i < n; i++) 
        cout << a[i] << " ";   
    return 0;  
}

五、归并排序

六、基数排序

七、计数排序(空缺) 

八、排序代码 

1、插入的排序

#include <iostream>  
using namespace std;  

void insertionSort(int a[], int n){
    int i, j, key;
    for (i = 1; i < n; i++){
        key = a[i];
        for (j = i - 1; j >= 0 && a[j] > key; j--){
            a[j + 1] = a[j];
        }
        a[j + 1] = key;
    }
}
int main(){
    int a[] = {12, 11, 13, 5, 6};
    int n = sizeof(a) / sizeof(a[0]);
    insertionSort(a, n);
    for (int i = 0; i < n; i++)
        printf("%d ", a[i]);
    return 0;
}

折半插入

#include <iostream>  
using namespace std;  

void InsertSort(int a[], int n) {  
    int i, left, right, mid, j;  
    for (i = 2; i <= n; i++) {  
        a[0] = a[i];  
        left = 1;  
        right = i - 1;  
        while (left <= right){  
            mid = (left + right) / 2;  
            if (a[mid] > a[0]) right = mid - 1;  
            else left = mid + 1;  
        }  
        for (j = i - 1; j >= left; j--) {  
            a[j + 1] = a[j];  
        }  
        a[left] = a[0];  
    }  
}  
int main() {  
    int a[] = {4, 3, 2, 10, 12, 1, 5, 6};  
    int n = sizeof(a) / sizeof(a[0]);  
    InsertSort(a, n);  
    for (int i = 1; i <= n; i++) {  
        printf("%d ", a[i]);  
    }  
    printf("\n");  
    return 0;  
}

希尔

#include <iostream>  
using namespace std;  

void shell_sort(int a[], int n) {  
    int i, j, temp, d;  
    for (d = n / 2; d >= 1; d /= 2) {  
        for (i = d; i < n; i++) {  
            temp = a[i];  
            // 直接插入排序  
            for (j = i - d; j >= 0 && a[j] > temp; j -= d) {  
                a[j + d] = a[j];  
            }  
            a[j + d] = temp;  
        }  
    }  
}  
int main() {  
    int a[] = {12, 34, 54, 2, 3};  
    int n = sizeof(a) / sizeof(a[0]);  
    shell_sort(a, n);  
    for (int i = 0; i < n; i++) {  
        printf("%d ", a[i]);  
    }  
    printf("\n");  
    return 0;  
}

2、交换的排序

冒泡

#include <iostream>  
using namespace std;  

void bubbleSort(int a[], int n) {  
    int i, j, temp;  
    for (i = 0; i < n-1; i++) {  
        int flag = 0;  
        for (j = 0; j < n-1-i; j++) {  
            if (a[j] > a[j+1]) {  
                temp = a[j];  
                a[j] = a[j+1];  
                a[j+1] = temp;  
                flag = 1;  
            }  
        }  
        if (flag == 0) return;  
    }  
}  
int main() {  
    int a[] = {64, 34, 25, 12, 22, 11, 90};  
    int n = sizeof(a) / sizeof(a[0]);  
    bubbleSort(a, n);  
    for (int i = 0; i < n; i++) {  
        printf("%d ", a[i]);  
    }  
    printf("\n");  
    return 0;  
}

快排

#include <iostream>  
using namespace std;   

int partition(int a[], int left, int right) {  
    int pivot = a[left];  
    while (left < right) {  
        while (left < right && a[right] >= pivot) right--;  
        a[left] = a[right];  
        while (left < right && a[left] <= pivot) left++;  
        a[right] = a[left];  
    }  
    a[left] = pivot;  
    return left;  
}  
void quickSort(int a[], int left, int right) {  
    if (left < right) {  
        int pivotIndex = partition(a, left, right);  
        quickSort(a, left, pivotIndex - 1);  
        quickSort(a, pivotIndex + 1, right);  
    }  
}  
int main() {  
    int a[] = {64, 34, 25, 12, 22, 11, 90};  
    int n = sizeof(a) / sizeof(a[0]);  
    quickSort(a, 0, n - 1);  
    for (int i = 0; i < n; i++) {  
        printf("%d ", a[i]);  
    }  
    printf("\n");  
    return 0;  
}

3、选择的排序

选择

#include <iostream>  
using namespace std;  
 
void swap1(int &a, int &b) {// 通过引用交换两个整数   
    int temp = a;  
    a = b;  
    b = temp;  
}  
void swap2(int *a, int *b) {// 通过指针交换两个整数  
    int temp = *a;  
    *a = *b;  
    *b = temp;  
}
void selectSort(int a[], int n) {  
    int i, j, k;  
    for (i = 0; i < n; i++) {  
        k = i;  
        for (j = i + 1; j < n; j++) { // 找当前最小值的下标  
            if (a[j] < a[k]) {  
                k = j;  
            }  
        }  
        swap1(a[k],a[i]);   //swap2(a[k],a[i]);
    }  
}  
int main() {  
    int a[] = {64, 34, 25, 12, 22, 11, 90};  
    int n = sizeof(a) / sizeof(a[0]);  
    selectSort(a, n);  
    for (int i = 0; i < n; i++) {  
        printf("%d ", a[i]);  
    }  
    printf("\n");  
    return 0;  
}

7、堆排序

#include <iostream>  
using namespace std;  
void swap(int &a, int &b) {  
    int temp = a;  
    a = b;  
    b = temp;  
}  
void HeapAdjust(int a[], int n, int i) {//调整堆  
    int max = i;  
    int lchild = 2 * i + 1; // 左孩子  
    int rchild = 2 * i + 2; // 右孩子  
    if (lchild < n && a[lchild] > a[max])  max = lchild;  
    if (rchild < n && a[rchild] > a[max])  max = rchild;  
    if (max != i) {  
        swap(a[max], a[i]);  
        HeapAdjust(a, n, max);  
    }  
}  
void HeapSort(int a[], int n) {// 堆排序    
    for (int i = n / 2 - 1; i >= 0; i--) {  
        HeapAdjust(a, n, i);  
    }  
    for (int i = n - 1; i > 0; i--) {  
        swap(a[0], a[i]);  
        HeapAdjust(a, i, 0);  
    }  
}  
int main() {  
    int a[] = {64, 34, 25, 12, 22, 11, 90};  
    int n = sizeof(a) / sizeof(a[0]);  
    HeapSort(a, n);  
    for (int i = 0; i < n; i++) 
        cout << a[i] << " ";   
    return 0;  
}

4、归并排序

#include <iostream>  
using namespace std;  
  
void merge(int a[], int temp[], int left, int mid, int right) {  
    int i = left;  
    int j = mid + 1;  
    int k = 0;  
    while (i <= mid && j <= right) {  
        if (a[i] <= a[j])  temp[k++] = a[i++];  
        else   temp[k++] = a[j++];  
    }  
    while (i <= mid)    temp[k++] = a[i++];  
    while (j <= right)   temp[k++] = a[j++];  
    for (int p = 0; p < k; p++) 
        a[left + p] = temp[p];  
}  
void mergeSort(int a[], int temp[], int left, int right) {  
    if (left < right) {  
        int mid = (left + right) / 2;  
        mergeSort(a, temp, left, mid);  
        mergeSort(a, temp, mid + 1, right);  
        merge(a, temp, left, mid, right);  
    }  
}  
int main() {  
    int a[] = {64, 34, 25, 12, 22, 11, 90};  
    int n = sizeof(a) / sizeof(a[0]);  
    int* temp = new int[n];  
    mergeSort(a, temp, 0, n - 1);  
    for (int i = 0; i < n; i++) {  
        cout << a[i] << " ";  
    }  
    delete[] temp;  
    return 0;  
}

5、计数排序

举报

相关推荐

0 条评论