//下面的算法是快速排序的原形,霍尔排序
#include<stdio.h>
int q(int *a, int n, int m)
{
int low = n, high = m;
int temp = a[low];
int i;
while (low < high)
{
while(low < high && a[high] >= temp)
{
--high;
}
a[low] = a[high];
while(low < high && a[low] <= temp)
{
++low;
}
a[high] = a[low];
}
a[high] = temp;
return high;
}
void qsort(int *a, int n, int m)
{
int high;
if(n < m)
{
high = q(a, n, m);
}
if(n < high-1)
{
qsort(a, n, high-1);
}
if(m > high+1)
{
qsort(a, high+1, m);
}
}
int main()
{
int *a;
int i, j, length;
int temp = 0;
printf("input :");
scanf("%d",&length);
a = (int*) malloc((length) * sizeof(int));
printf("input %d Numble :", length);
for(i = 0; i < length; i++)
{
scanf(" %d", &a[i]);
}
qsort(a, 0, length-1);
for(i = 0; i < length; i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
// 改进后的快速排序
int sort1(int *a, int n, int m)
{
int i = n, j = n;
int key = a[m], temp;
if( n >= m)
{
return 1;
}
while(j <= m)
{
if( a[j] <= key)
{
temp = a[j];
a[j] = a[i];
a[i] = temp;
i++;
j++;
}
else
{
j++;
}
}
i = i - 1;
sort1(a, n, i-1);
sort1(a, i+1, m);
return 1;
}
分享到:
相关推荐
本主题将详细探讨四种常见的排序算法:选择排序、插入排序、快速排序以及冒泡排序,它们都是用C语言实现的。以下是这些排序算法的详细解析: 1. **选择排序(Selection Sort)** - 选择排序是一种简单直观的排序...
但是,快速排序的实际执行时间却比堆排序更快,这是因为快速排序的 cache freundliness 比堆排序更好。 快速排序、堆排序和归并排序都是 O(nlogn) 的时间复杂度,但是它们的稳定性、辅助空间和 cache freundliness ...
快速排序-flash演示 可自己输入数据.......
procedure qsort(l,r:longint); var k,t,i,j:longint; begin k:=(l+r)div 2; t:=a[k]; i:=l; j:=r; repeat
快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的基本思想是分治法(Divide and Conquer),通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的...
快速排序 import java.util.Arrays; public class QuickSort { public static void quickSort(int[] arr) { if (arr == null || arr.length ) { return; } quickSort(arr, 0, arr.length - 1); } ...
Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法,大家可以将源码下载下来进行学习,附带着注释和解释,有不理解的可以找博主一起探讨,共同...
快速排序算法c语言
输入若干组长度各异的待排序列,分别用快速排序算法和改进的枢轴元素三者取中算法对待排序列进行排序,当待排子序列长度已小于 20时,改用直接插入排序,利用时间函数验证三者取中算法在效率上的提高。(提示: 待排...
该算法的基本思想是:选择一个基准值,通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归...
MFC动态演示气泡排序、选择性排序和快速排序_SortAlgorithmDisplay.zip
### 快速排序知识点解析 #### 一、快速排序简介 快速排序是一种高效的排序算法,由英国计算机科学家托尼·霍尔(Tony Hoare)在1960年提出。它采用分治策略来把一个序列分为较小和较大的两个子序列,然后递归地...
通过阅读和实践这些代码,你可以深入理解排序算法的内部机制,为进一步学习更复杂的排序算法如快速排序、归并排序等奠定基础。同时,这些基础知识对于提升编程能力,优化数据处理效率,解决实际问题都有着重要作用。
各种排序算法,包括希尔算法,快速排序,堆排序-A variety of sorting algorithms, including the Hill algorithm, quick sort, heap sort
本实验旨在通过对两种经典排序算法——快速排序和归并排序的研究与实现,深入理解它们的基本原理、时间复杂度,并通过编程实践比较这两种算法在不同数据规模下的性能表现。 #### 二、快速排序 **1. 基本思想** ...
### c语言 - 快速排序 #### 知识点概览 1. **递归算法的概念及应用** 2. **快速排序的基本原理** 3. **快速排序的实现步骤** 4. **快速排序的时间复杂度分析** 5. **快速排序的空间复杂度分析** 6. **快速排序与...
数据结构--快速排序C++源代码,自己编写调试,代码简单易懂,不长
5. 快速排序(Quick Sort):快速排序是一种分治策略的排序算法,通过选取一个“基准”元素,将数组分为两部分,一部分的所有元素都小于基准,另一部分的所有元素都大于基准,然后再对这两部分进行快速排序。...
快速排序是初始化标记low为划分部分第一个元素的位置,high为最后一个元素的位置,然后不断地移动两标记并交换元素。 选择排序是每一趟在后面n-i+1(i=1,2,,n-1)个待排序元素中选取关键字最小的元素,作为有序子...
- **快速排序**:使用分治策略,通过一个“基准”值将数组分为两部分,分别对这两部分进行排序。 - **归并排序**:同样采用分治策略,将数组拆分成小数组,然后合并已排序的小数组。 2. **基于文件属性排序** - ...