1. 程式人生 > >【資料結構】---快速排序

【資料結構】---快速排序

 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+" ");
    }