排序算法之快速排序

来源:互联网 发布:电脑怎么下载淘宝 编辑:程序博客网 时间:2024/05/21 05:07

简述

    快速排序有两个方向,左边的i下标一直往右走(当条件a[i] <= a[center_index]时),其中center_index是中枢元素的数组下标,一般取为数组第0个元素。而右边的j下标一直往左走(当a[j] > a[center_index]时)。如果i和j都走不动了,i <= j, 交换a[i]和a[j],重复上面的过程,直到i>j。交换a[j]和a[center_index],完成一趟快速排序。在中枢元素和a[j]交换的时候,很有可能把前面的元素的稳定性打乱,比如序列为 5 3 3 4 3 8 9 10 11现在中枢元素5和3(第5个元素,下标从1开始计)交换就会把元素3的稳定性打乱。所以快速排序是一个不稳定的排序算法,不稳定发生在中枢元素和a[j]交换的时刻。

实现
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#include<time.h>#define MAX 10void printArray(int arr[], int len){for (int i = 0; i < len; i++){printf("%d ", arr[i]);}printf("\n");}//快速排序void QuickSort(int arr[], int start, int end){int i = start; int j = end;int target = arr[start];if (i < j){while (i < j){while (i < j && target > arr[j]){j--;}if (i < j){arr[i] = arr[j];i++;}while (i < j && target < arr[i]){i++;}if (i < j){arr[j] = arr[i];j--;}}//i的位置就是基准数最合适的位置//把基准值放入arr[j] = target;//arr[i] = target;//快速排序左半部分QuickSort(arr, start, i - 1);//快速排序右半部分QuickSort(arr, i + 1, end);}}int main(){int arr[MAX];srand((unsigned int)time(NULL));for (int i = 0; i < MAX; i++){arr[i] = rand() % MAX;}//排序前printArray(arr, MAX);//快速排序QuickSort(arr, 0, MAX - 1);//排序后printArray(arr, MAX);system("pause");return EXIT_SUCCESS;}

原创粉丝点击