1、快速排序的思想是通过一趟排序将序列分为两个部分,其中一部分的关键字不大于另一部分的关键字,对这两个部分递归进行快速排序,直到整个序列有序。
2、快速排序实现算法:
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int data[100];
int length;
}SqList;
void Out(SqList *L)
{
int i;
for (i = 0; i < L->length; i++)
{
printf("%d ", L->data[i]);
}
}
void Insert(SqList *L,int size)
{
int i;
L->length = size;
printf("输入%d个元素", size );
for (i = 0; i < L->length; i++)
{
scanf_s("%d", &L->data[i]);
}
}
void Quick(SqList *L,int low ,int high)
{
int i , j , key;
if (low < high)
{
key = L->data[low];//枢轴记录关键字
i = low;//i,j分别指向序列第一个和最后一个记录
j = high;
while (i < j)
{
while (L->data[j] >= key && i < j)
j--;//若后关键字小于枢轴关键字,则将后关键字的位置向前移
if (i < j)
L->data[i] = L->data[j];//将比key小的关键字移到前面
while (L->data[i] <= key && i < j)
i++;//若前关键字大于枢轴关键字,则将前关键字的位置向后移
if (i < j)
L->data[j] = L->data[i];//将比key大的关键字移到后面
}
L->data[i] = key;//枢轴关键字移到正确的位置
Quick(L, low, i - 1);
Quick(L, i + 1, high);
}
}
int main()
{
int size;
SqList L;
printf("输入表的长度:");
scanf_s("%d", &size);
Insert(&L,size);
Quick(&L,0,size-1);
printf("\n快速排序后的元素:");
Out(&L);
}
3、java快速排序实现:
public static void QuickSort(int a[],int low ,int high){
int i,j,key;
i = low;j = high;
if(low<high) {
key = a[low];
while (i < j) {
while (i < j && a[j] >= key)
j--;
if (i < j)
a[i] = a[j];
while (i < j && a[i] <= key)
i++;
if (i < j)
a[j] = a[i];
}
a[i] = key;
QuickSort(a, low, i - 1);
QuickSort(a, i + 1, high);
}
}
public static void main(String args[]){
int[] a ={5,1,3,4,2,9};
QuickSort(a,0,a.length-1);
for(int num:a)
System.out.print(num+" ");
}