zoukankan      html  css  js  c++  java
  • 快速排序学习

    快速排序学习的这个版本的特点是:

    1.原地排序

    2.采用了分治法

    3.采用递归

    伪代码:

    quick_sort(arr, low, high)
    
    i <-low, j <- high;
    
    mid <- (i+j)/2;
    实现从小到大排
    //设置哨兵
    pivot <- arr[mid];
    
    while i<= j
    从左向右寻找大于哨兵的元素,当然小于哨兵的就是无需排序的
    
    while arr[i] < pivot
    
       ++i;
    从右向左寻找小于哨兵元素
    while arr[j] > pivot
       --j;
    把寻找到的无序值进行交换并更新i,j
    if i <= j
      swap(arr[i],arr[j]);
      ++i,--j;
    while循环结束的条件是i>j
    进行递归
    if(low < i-1)
    
    quick_sort(arr, low, i-1)
    
    if(i < rigth)
    
    quick_sort(arr, i, high)
    

      C++实现:

    #include<iostream>
    //交换数据
    inline void my_swap(int &a, int &b)
    {
    	int temp = a;
    	a = b;
    	b =temp;
    }
    //快速排序
    void quick_sort(int *arr,int low,int high)
    {
    	int i = low, j = high;
    	int pivot = arr[(i+j)/2];
    	while(i <= j)
    	{
    		while(arr[i] < pivot)
    			++i;
    		while(arr[j] > pivot)
    			--j;
    		if (i <= j)
    		{
    			my_swap(arr[i],arr[j]);
    		    ++i;
    		    --j;
    		}
    	}
    	if(low < i-1)
    		quick_sort(arr,low,i-1);
    	if(i < high)
    		quick_sort(arr,i,high);
    }
    //打印数组
    void dis_arr(int *a, int n)
    {
    	std::cout << "The array is: ";
    	for (int i = 0; i< n;++i)
    	{
    		std::cout << a[i] << " ";
    	}
    	std::cout << std::endl;
    }
    int main()
    {
    	int arr[] = {1,-1,90,20,8,-80,-700};
    	int n = sizeof(arr)/sizeof(*arr);
    	dis_arr(arr,n);
    	quick_sort(arr,0,n-1);
    	dis_arr(arr,n);
    }
    
    
    

      

  • 相关阅读:
    常用的一些js方法
    git常用命令
    thread join和detach的区别
    C和C++的区别和联系
    C++面试集锦( 面试被问到的问题 )
    C/C++面试题:编写类String的构造函数、析构函数和赋值函数。
    C++ 多态的实现及原理
    获取当前操作系统的ip
    CString的头文件
    C++ 多用户模式下同一个exe只能运行一次
  • 原文地址:https://www.cnblogs.com/xiangshancuizhu/p/2138512.html
Copyright © 2011-2022 走看看