-
2021-05-25 04:08:14
#include
int Partition(int a[],int low,int high)
{
int pivotkey = a[low];
while(low
{
if(low=pivotkey) --high;
a[low]=a[high];
if(low
a[high]=a[low];
}
a[low]=pivotkey;
return low;
}
void Quick_Sort(int a[],int low,int high)
{
if(low
{
int position = Partition(a,low,high);
Quick_Sort(a,low,poisition-1);
Quick_Sort(a,poisition+1,high);
}
}
void main()
{
int a[4]={45,56,23,5};
Quick_Sort(a,0,3);
}
改进版:
void fun(int min,int max,int a[])
{
int key = a[min];
int i = min;
int j = max;
int temp;
if(min>=max)
return;
while(i
{
while((i
{j--;}
if(key > a[j])
{ a[i] = a[j]; a[j] = key; i++; }
while((i= a[i]))
{i++;}
if(key < a[i])
{ a[j] = a[i];a[i] = key; j--; }
}
fun(min,i-1,a);
fun(i+1,max,a);
}
int main()
{
int i;
int a[10] = {49,38,65,97,76,13,27,9,2,1};
for(i=0;i<10;i++)
printf(" %d ",a[i]);
printf("\n");
fun(0,9,a);
for(i=0;i<10;i++)
printf(" %d ",a[i]);
printf("\n");
return 0;
}
更多相关内容 -
快速排序c语言
2018-12-22 14:34:21快速排序c语言 -
045 快速排序 C语言 快速排序 C语言
2022-06-01 00:18:33045 快速排序 C语言 -
快速排序c语言代码文件
2022-06-28 17:26:00快速排序c语言代码文件 快速排序是一种基于分治法的排序算法,其中 通过选择枢轴元素(从数组中选择的元素)将数组划分为子数组。 在划分数组时,枢轴元素的位置应使小于枢轴的元素保留在左侧,大于枢轴的元素位于枢... -
快速排序C语言代码+辅助图+注释
2022-02-08 21:12:26以第一次为例,辅助图如下,在32位置确定之后数组变成了arry={23,18,7},32,{74,55,45},这样我们就将比32小的书放置在32的左面,比32大的数放置在32的右面,然后再将{23,18,7},{74,55,45}以上述方法分别进行排序,...思路:
利用分治法的思想,将一个大问题分解成两个相同结构的子问题,然后分为治之。
先确定一个key值作为基准,然后进行比较,比key值小的放在key的左面,比key大的放在key的右边。
以第一次为例,辅助图如下,在32位置确定之后数组变成了arry={23,18,7},32,{74,55,45},这样我们就将比32小的书放置在32的左面,比32大的数放置在32的右面,然后再将{23,18,7},{74,55,45}以上述方法分别进行排序,直到begin==height则排序结束。
代码:
#include<bits/stdc++.h> using namespace std; int n1; //一个交换函数 void swap(int *a,int *b){ int temp = *a; *a=*b; *b=temp; } void quickrow(int *arry,int begin,int end){ //如果左右标重合,则说明已经划分到最小 if(begin>=end){ return; } //l指左标,h指右标 int l=begin,h=end; //若l==h则说明区域划分结束 while(l<h){ //arry[l]为基准,若arry[l]<arry[h],则说明不需要我们交换位置,右标向左移动 while(arry[l]<arry[h]){ h--; } //判断左右标是否重合 if(l<h){ swap(arry[l],arry[h]); l++; } //arry[h]为基准,判断arry[l]<arry[h],则说明不需要我们交换位置,左标向右移动 while(arry[l]<arry[h]){ l++; } //判断左右标是否重合 if(l<h){ swap(arry[l],arry[h]); h--; } } quickrow(arry,begin,h-1); quickrow(arry,h+1,end); } int main(){ cin>>n1; int number[n1]; for(int i=0;i<n1;i++){ cin>>number[i]; } quickrow(number,0,n1-1); for(int i=0;i<n1;i++){ cout<<number[i]<<" "; } }
-
快速排序C语言代码
2015-12-21 09:38:03这是一个快排的程序,用c写的,经过我亲测,可以运行,有需要的小伙伴可以下载作为参考 -
快速排序C语言
2016-02-18 19:19:09快速排序C语言实现,这里提供给大家分享,很好用! -
c语言 数据结构 快速排序算法
2019-04-28 16:58:32c语言版本的数据结构的快速排序算法,适用于新手学习 -
快速排序C语言实现 - 源码详解
2019-10-12 15:10:22快速排序 时间复杂度: O(NlogN) 排序原理: 取初始基准值,将数组中其它元素与基准值比较,根据大小分别放置在基准值的左右。 一轮比较后,确定该基准值在数组中的确切位置。再将该位置前后所有元素分成两个...快速排序
时间复杂度: O(NlogN)
排序原理:
取初始基准值,将数组中其它元素与基准值比较,根据大小分别放置在基准值的左右。
一轮比较后,确定该基准值在数组中的确切位置。再将该位置前后所有元素分成两个数组,重复上述过程,直到最后只剩下一个数进入下一轮,则重复完毕。排序过程:
取数组首元素做初始基准值,以一右一左的依次顺序比较剩余所有元素,右边大于基准值的则右下标值减一,直到遇到小于基准值的,则将该值赋值给左边首位元素,不用担心覆盖该元素值,因为它已经保存给了基准值。
然后切换到左边,遇到小于基准值的则左下标值加一,遇到大于的则赋值给右边元素,以此形成一个循环,直到左下标等于右下标值,则表明所有元素轮完,此时下标位置就是该基准值在该数组中的排序位置。
利用递归,将左右两边的数据传递下去,重复上述步骤,直到最后传递下去的左右两个下标值相等,则返回。适用场景:
数据量多、算法时间要求高、数据相对随机的场景中,快排是一个比较好的选择参数:
data 排序数据 left 数据左边界 right 数据右边界 direction 排序方向 从大到小/从小到大
源码:
void QuickSort(int* data, int left, int right, int direction) { int i = left, j = right, index = data[left]; //参数合法验证 if (data == NULL)return; if (right >= sizeof(*data) / sizeof(int))return; if (left < 0)return; if (left >= right)return;//递归返回条件 while (i < j)//遍历完成条件 i == j { while (data[j] <= index)//右边 从尾巴开始往前找 以初始元素做基准值 找该基准值的位置 j--; //left所在位置的值已经复制给了index从而腾出了一个灵活的空间,不用担心会覆盖 data[i] = data[j];//翻转到另一边 并把这个大于index的数据放到左边去 //这里 i < j的条件是因为在这里也要判断是否while结束 while (data[i] >= index && i < j)//左边 从头往后找 i++; data[j] = data[i];//翻转到另一边 并把这个小于index的数据放到右边去 } data[i] = index; QuickSort(data, left, i - 1, direction);//递归当前位置左右两边 QuickSort(data, i + 1, right, direction); }
-
C语言实现多种链表快速排序
2017-05-08 14:58:17C语言实现多种链表快速排序 -
数据结构—快速排序 C语言代码实现
2020-09-19 15:37:04快速排序是20世纪的十大算法之一,在常见的o(nlogn)的时间复杂度的算法(快速排序,堆排序,2路归并排序)中,快速排序的平均性能也是最优的,下面是快排的c语言实现代码 // 基本思想是分治法,故一般用到递归 ...快速排序是20世纪的十大算法之一,在常见的o(nlogn)的时间复杂度的算法(快速排序,堆排序,2路归并排序)中,快速排序的平均性能也是最优的,下面是快排的c语言实现代码
// 基本思想是分治法,故一般用到递归 void QuickSort(int L[],int low, int high) //low和high指示排序的范围 { int temp=0; //用于存储待交换的元素的值 int i=low,j=high; if(low<high) { temp=L[low]//序列中第一个关键字作为枢轴元素 while(i<j) { while(i<j&&temp<=L[j]) //从右往左扫描 --j; if(i<j) { L[i]=L[j] ++i; } while(i<j&&temp>=L[i]) //从左往右扫描 ++i; if(i<j) { L[j]=L[i] --j; } } }//一次排序完成 L[i]=temp;//此时temp已经被放在最终位置上,左边的元素均比其小,右边的元素均比其大 QuickSort(int L[],int low, i-1); QuickSort(int L[],int i+1, high); //递归,对分成的两个子序列进行快速排序 }
-
C语言快速排序函数用法(qsort)
2021-01-01 00:00:53本文实例为大家分享了C语言快排函数用法,供大家参考,具体内容如下 #include #include #include struct student { int id; char name[12]; char sex; }; int compare(const void* a,const void* b)//基本... -
c语言实快速排序算法 quicksort
2019-04-15 10:52:18快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为... -
快速排序 C语言实现
2020-11-19 22:06:22快速排序 快速排序(Quick Sort )是由冒泡排序改进而得的。在冒泡排序过程中,只对相邻的两个记录进行比较,因此每次交换两个相邻记录时只能消除一个逆序。 如果能通过两个(不相邻)记录的一次交换,消除多个逆序,则... -
快速排序C语言递归代码实现
2019-03-06 23:18:54快速排序的思路: 假如对数组(arr[])进行排序,那么定义一个基准(datum)并把数组第一个数据赋给datum,定义两个下标(low 和 high)分别记录数组第一个数据下标和数据最后一个数据下标。首先,从数组arr[high]... -
快速排序 C语言版
2014-03-08 23:05:32C语言版快速排序的完成代码,欢迎交流讨论 -
快速排序 C语言
2022-02-10 23:35:52快速排序的基本思想是:首先找一个基准数,一般选第一个数或者最后一个数作为基准数,然后先把这一串数以基准数为界限分成两部分,一部分比基准数小,另一部分比基准数大。然后用分治法的思想,进行递归调用,对每一... -
快速排序C语言实现
2019-07-14 11:15:23C语言实现快速排序 快速排序的核心思想: 会把待排序数组中的一个数当作基准数,一般会把最左边的数当作基准数,然后从两边开始进行检索。先从右边开始检索比基准数小的,检索到了就停下,然后再从左边开始检索比... -
用C语言实现快速排序
2016-11-16 11:46:08这是一个用C语言实现的快速排序的程序,它实现了对一个英文文本中的单词排序并将排序结果输出到另外一个文件中。 -
c语言快速排序算法示例代码分享
2020-09-04 14:35:22快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists) -
快速排序 c语言代码实现
2018-04-08 13:56:04快速排序 快速排序,顾名思义,是一种排序速度非常快的排序方法,该算法之所以非常快,是因为高度优化的内部循环,该算法在实际应用中非常广泛。 快速排序是一种采用分治思想,在实践中通常运行较快一种排序算法 ... -
数据结构-快速排序 C语言源码
2019-03-17 12:59:55数据结构-快速排序 C语言源码 #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; struct KP{ int*elem; int length; };//定义结构 void ss(KP&amp; l,int n) { int ... -
快速排序(C语言)
2022-02-23 20:21:24快速排序需要两个哨兵,i 和 j,分别指向数组的头和尾。接下来就要进行移动。 我们通常选择第一个元素作为基准数,去移动数组元素,使其达到这个基准数的左边都是小于它的,右边都是大于它的。开始移动 i 和 j , -
C语言实现快速排序
2022-03-18 19:22:26快速排序核心思想: 在待排序数组中找一个key值 单次排序后,左边放比key小的,右边放比key大的值 左右两遍不断重复此操作。从而实现排序。 由于递归深度为logN,且数据为N。易得出时间复杂度为N*logN 实现... -
快速排序(C语言实现)
2022-01-11 22:20:44快速排序算法(原理加C语言代码实现) -
快速排序-C语言版(带图详细)
2022-04-18 15:53:43快速排序算法是在几种排序算法中效率最高的一个排序算法了,故称为快速排序,它的时间复杂度为:O(nlog~2~n),相比冒泡排序算法的O(n^2^)有很大的提升。 二、算法思想 1、选取一个基准元素(一般我们将待排序序列中... -
快速排序(c语言实现)
2021-11-22 21:32:19快速排序 -
QuickSort【快速排序C语言版本】
2014-05-07 15:38:28在VS 2008中,用C语言写的快速排序算法。不用多余的数组,直接对原数组进行排序(in place)。同时在递归调用中,对于【数组组就是数组首地址】的理解会更加通透。