zoukankan      html  css  js  c++  java
  • C语言讲义——快速排序

    快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序
    它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)
    基本思想:
    1.先从数列中取出一个数作为基准数。
    2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
    3.再对左右区间重复第二步,直到各区间只有一个数。

    先把基准值(最左)存起来
    高位(右)大的往左边拉
    低位(左)小的往右边拉
    最后,存的那个基准值(曾经最左)放中间
    对左:相同处理
    对右:相同处理

    #include <stdio.h>
    int quicksort(int arr[], int left, int right) {
    	if(left < right) {
    		// 定位最左
    		int key = arr[left];
    		int i = left;
    		int j = right;
    		while(i < j) {
    			while(i < j && arr[j] > key) {
    				// 高标左移←
    				j--;
    			}
    			if (arr[i] != arr[j]) {
    				// 高位:小的往左边拉
    				arr[i] = arr[j];
    			}
    			while(i < j && arr[i] < key) {
    				// 低标右移→
    				i++;
    			}
    			if (arr[i] != arr[j]) {
    				// 低位:大的往右边拉
    				arr[j] = arr[i];
    			}
    		}
    		arr[i] = key;
    
    		quicksort(arr,left,i-1);
    		quicksort(arr,i+1,right);
    	}
    }
    void printArray(int arr[],int len ) {
    	int i = 0;
    	for(i = 0 ; i<len; i++) {
    		printf("%d ", arr[i]);
    	}
    	printf("
    ");
    }
    
    int main(int argc, char *argv[]) {
    	int a[] = {3,4,5,1,2};
    	printArray(a,5);
    
    	quicksort(a, 0, 4);
    	printArray(a,5);
    
    	return 0;
    }
    
  • 相关阅读:
    7-5 幸运彩票 (15分)
    基于Python实现学生管理系统
    NB-IoT模块烧写详细过程
    IAR软件使用的快捷键配置以及配置cc2530环境
    7-54 求方程的解 (10 分)
    7-52 计算球体积 (10 分)
    7-51 号码牌的制作 (10 分)
    7-48 输出星期名缩写 (70 分)
    7-49 求前n项的阶乘之和 (15 分)
    7-46 jmu-python-求单词长度 (10 分)
  • 原文地址:https://www.cnblogs.com/tigerlion/p/11191546.html
Copyright © 2011-2022 走看看