C/C++实现快速排序

news/2024/5/19 21:45:27 标签: 快速排序, c/c++

快速排序 -

(类似于选择排序的定位思想)选一基准元素,依次将剩余元素中小于该基准元素的值放置其左侧,大于等于该基准元素的值放置其右侧;然后,取基准元素的前半部分和后半部分分别进行同样的处理;以此类推,直至各子序列剩余一个元素时,即排序完成(类比二叉树的思想,from up to down)

时间复杂度:O(NlogN)   稳定性:不稳定

快排C++实现

/*快排C++实现*/
void quickSort(vector<int> &arr, int bgn, int end)  //arr must be the reference of real param
{
    //数组arr空or仅有一个元素则退出
    if (bgn >= end - 1)
        return;

    int lindex = bgn;
    int rindex = end - 1;
    int std = arr[lindex];
    while (lindex < rindex)
    {
        while (lindex < rindex)
        {
            if (arr[rindex] < std)
            {
                arr[lindex++] = arr[rindex];
                break;
            }
            --rindex;
        }

        while (lindex < rindex)
        {
            if (arr[lindex] >= std)
            {
                arr[rindex--] = arr[lindex];
                break;
            }
            ++lindex;
        } 
    }

    arr[lindex] = std;
    quickSort(arr, bgn, lindex);
    quickSort(arr, rindex + 1, end);
}

快排C语言实现

int partition(int a[], int low, int high)
{
	int i = low, j = high + 1; //左右扫描指针
	int v = a[low];//切分元素
	int temp;
	while (true) //扫描左右,检查扫描是否结束并交换元素
	{
		while (a[++i] < v)
			if (i == high)
				break;
		while (v < a[--j]);
		if (i >= j)
			break;
		temp = a[i];
		a[i] = a[j];
		a[j] = temp;
	}
	temp = a[low];
	a[low] = a[j];
	a[j] = temp;
	return j;
}

void QuickSort(int a[], int low, int high)
{
	if (high <= low)
		return;
	int index = partition(a, low, high);
	QuickSort(a, low, index - 1);
	QuickSort(a, index + 1, high);
}

http://www.niftyadmin.cn/n/1405010.html

相关文章

C/C++实现插入排序

插入排序 - 数列前面部分看为有序&#xff0c;依次将后面的无序数列元素插入到前面的有序数列中&#xff0c;初始状态有序数列仅有一个元素&#xff0c;即首元素。在将无序数列元素插入有序数列的过程中&#xff0c;采用了逆序遍历有序数列&#xff0c;相较于顺序遍历会稍显繁…

c#.net的网页缓存设置

当用户访问页面时&#xff0c;整个页面将会被服务器保存在内存中&#xff0c;这样就对页面进行了缓存。当用户再次访问该页&#xff0c;页面不会再次执行数据操作&#xff0c;页面首先会检查服务器中是否存在缓存&#xff0c;如果缓存存在&#xff0c;则直接从缓存中获取页面信…

c/c++实现希尔排序

希尔排序 - 插入排序的改进版。为了减少数据的移动次数&#xff0c;在初始序列较大时取较大的步长&#xff0c;通常取序列长度的一半&#xff0c;此时只有两个元素比较&#xff0c;交换一次&#xff1b;之后步长依次减半直至步长为1&#xff0c;即为插入排序&#xff0c;由于此…

window.location.href/replace/reload()--页面跳转+替换+刷新

window.location.href/replace/reload()--页面跳转替换刷新 window.location跳转替换刷新 一、最外层top跳转页面&#xff0c;适合用于iframe框架集 top.window.location.href("${pageContext.request.contextPath}/Login_goBack"); 二、window.location.href和w…

c/c++实现桶排序

桶排序 - 实现线性排序&#xff0c;但当元素间值得大小有较大差距时会带来内存空间的较大浪费。首先&#xff0c;找出待排序列中得最大元素max&#xff0c;申请内存大小为max 1的桶&#xff08;数组&#xff09;并初始化为0&#xff1b;然后&#xff0c;遍历排序数列&#xf…

js根据IP地址判断城市

js根据IP地址判断城市1 var province ; 2 var city ; 3 jQuery.getScript("http://int.dpool.sina.com.cn/iplookup/iplookup.php?formatjs",function(){ 4 province remote_ip_info["province"]; 5 city remote_ip_info["city"…

c/c++实现基数排序

基数排序 - 桶排序的改进版&#xff0c;桶的大小固定为10&#xff0c;减少了内存空间的开销。首先&#xff0c;找出待排序列中得最大元素max&#xff0c;并依次按max的低位到高位对所有元素排序&#xff1b;桶元素10个元素的大小即为待排序数列元素对应数值为相等元素的个数&a…

c/c++实现归并排序

归并排序 - 采用了分治和递归的思想&#xff0c;递归&分治-排序整个数列如同排序两个有序数列&#xff0c;依次执行这个过程直至排序末端的两个元素&#xff0c;再依次向上层输送排序好的两个子列进行排序直至整个数列有序&#xff08;类比二叉树的思想&#xff0c;from d…