【資料結構】---快速排序
阿新 • • 發佈:2019-01-10
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+" "); }