排序算法总结

冒泡排序

 1 void BubbleSort(ElementType A[], int N) {
 2     ElementType temp;
 3     for(int i=0; i<N; i++) {
 4         for(int j=0; j<N-i-1; j++) { // 关键点在与j<N-i-1,生成一个升序的有序表
 5             if(A[j] > A[j+1]) {
 6                 temp = A[j];
 7                 A[j] = A[j+1];
 8                 A[j+1] = temp;
 9             }
10         }
11     }
12 }

快速排序

 1 // 快排的关键点
 2 // 1、在右边找比基点小的元素,与基点位置互换
 3 // 2、在左边找大于或等于基点的元素,与基点位置互换
 4 // 3、当left与right指针相同时,则指针的位置即基点所在的最终位置
 5 void QuickSort(int arr[], int leftBound, int rightBound) {
 6     if (leftBound < rightBound) { 
 7         int left = leftBound, right = rightBound, prior = arr[leftBound];
 8         while (left < right) {
 9             while (left < right && arr[right] >= prior) right--;
10             if (left < right) arr[left++] = arr[right];
11             while (left < right && arr[left] < prior) left++;
12             if (left < right) arr[right--] = arr[left];
13         }
14         arr[left] = prior;
15         QuickSort(arr, leftBound, left - 1);
16         QuickSort(arr, left + 1, rightBound);
17     }
18 }

 插入排序

void InsertSort(int A[], int N ){
    for (int i = 1; i < N; i++) {        // 第 1 个数肯定是有序的,从第 2 个数开始遍历,依次插入有序序列
        int temp = A[i];                // 取出第 i 个数,和前 i-1 个数比较后,插入合适位置
        int j = i - 1;                    // 因为前 i-1 个数都是从小到大的有序序列,所以只要当前比较的数 (array[j]) 比 temp 大,就把这个数后移一位
        while (j >= 0 && A[j] < temp) {    // 当 j < 0 或 array[j] < temp(array[i]) 时终止
            A[j + 1] = A[j];            // 将大于 temp(array[i]) 的数据后移
            j--;                        // 向前比较
        }                               // 结束循环
        A[j + 1] = temp;                // array[i]插入到正确的位置上
    }
}

 

posted on 2021-01-07 00:17  letwant  阅读(81)  评论(0编辑  收藏  举报

导航