1.誰能給份快速排序的代碼
public class QuickSort
{
public static void main(String[] args)
{
int []array={3,1,2};
quickSort(array,0,2);
for(int i:array)
*n(i);
}
public static void quickSort(int[] arr, int l, int r) // 分劃交換排序,快速排序
{
if (l >= r) // 遞歸出口
return;
int i, j, k;
int t;
k = arr[l];
i = l;
j = r + 1;
while (i {
do
{
i++;
}
while (ido
{
j--;
}
while (j>=0 && arr[j] >k);
if (i {
t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
t = arr[l]; // 最左邊的關鍵詞放到它最終的位置
arr[l] = arr[j];
arr[j] = t;
quickSort(arr, l, j - 1); // 遞歸排序左邊和右邊
quickSort(arr, j + 1, r);
}
}
2.C語言快速排序代碼
采用快速排序,用遞歸實現#include
3.C語言快速排序代碼
采用快速排序,用遞歸實現
#include <stdio.h>
#define N 10 //定義排序數組元素個數
int Qsort(int start,int length,int a[])//start排序的起始,length是要排序序列長度
{
int x = a[start];
int i,j;
i = start;
j = length -1;
while(i < j)
{
if(x < a[j])
j--;
else if(x > a[j])
{
a[i] = a[j];
a[j] = x;
i++;
}
else if(x < a[i])
{
a[j] = a[i];
a[i] = x;
j--;
}
else
i++;
}
if(start < length-1)
{
Qsort(start,i,a);
Qsort(i+1,length,a);
}
}
void main()
{
int a[N] = {0};
int i;
for(i = 0;i < N;i++)
scanf("%d",&a[i]);
Qsort(0,N,a);
for(i = 0;i < N;i++)
printf("%d ",a[i]);
}
程序執行時輸入N個數,對這N個數進行排序,可以預設N的長度
4.快速排序代碼
c語言:
// 對一個給定范圍的子序列選定一個樞紐元素,執行完函數之后返回分割元素所在的位置,
// 在分割元素之前的元素都小于樞紐元素,在它后面的元素都大于這個元素
int Partition(int array[], int low, int high)
{
// 采用子序列的第一個元素為樞紐元素
int pivot = array[low];
while (low < high)
{
// 從后往前在后半部分中尋找第一個小于樞紐元素的元素
while (low < high && array[high] >= pivot)
{
--high;
}
// 將這個比樞紐元素小的元素交換到前半部分
Swap(&array[low], &array[high]);
// 從前往后在前半部分中尋找第一個大于樞紐元素的元素
while (low < high && array[low] <= pivot)
{
++low;
}
// 將這個比樞紐元素大的元素交換到后半部分
Swap(&array[low], &array[high]);
}
// 返回樞紐元素所在的位置
return low;
}
// 快速排序
void QuickSort(int array[], int low, int high)
{
if (low < high)
{
int n = Partition(array, low, high);
QuickSort(array, low, n);
QuickSort(array, n + 1, high);
}
}
來自編程入門網:
C#語言:
static public void fastsort(int[] array, int begin,int end) //快速排序
{
if (begin < 0 || end < 0 || begin >end)
return;
int left = begin, right = end, temp; //經典的快排
temp = array[left];
while (right != left)
{
while (temp < array[right] && right>left)
right--;
if (right > left)
{
array[left] = array[right];
left++;
}
while (temp > array[left] && right > left)
left++;
if (right > left)
{
array[right] = array[left];
right--;
}
}
array[right] = temp;
fastsort(array, right + 1, end);
fastsort(array, begin, right-1);
}
C#語言的我只給了函數給你,如果你懂C#的話,你應該知道怎樣調用吧!
5.給我一個快速排序代碼,要易懂的
public class quicksort{ public static void main(String args[]) { int[] a=new int[11]; a[0]=0; a[1]=4; a[2]=3; a[3]=6; a[4]=5; a[5]=0; a[6]=7; a[7]=2; a[8]=1; a[9]=8; a[10]=9; int i=1,j=10; new quicksort().quick_sort(a,i,j); for(int k=0;ka[0]&&(i void quick_sort(int s[], int l, int r){ if(l >= r) //只有一個元素或者區間錯誤 return; if (l < r){ int i = l, j = r, x = s[l]; while (i < j) { while(i < j && s[j] >= x) // 從右向左找第一個小于x的數 j--; s[i] = s[j]; while(i < j && s[i] < x) // 從左向右找第一個大于等于x的數 i++; s[j] = s[i]; } s[i] = x; quick_sort(s, l, i - 1); quick_sort(s, i + 1, r); }}。 1、“快速排序法”使用的是遞歸原理,下面一個例子來說明“快速排序法”的原理。首先給出一個數組{53,12,98,63,18,72,80,46, 32,21},先找到第一個數--53,把它作為中間值,也就是說,要把53放在一個位置,使得它左邊的值比它小,右邊的值比它大。{21,12,32, 46,18,53,80,72,63,98},這樣一個數組的排序就變成了兩個小數組的排序--53左邊的數組和53右邊的數組,而這兩個數組繼續用同樣的方式繼續下去,一直到順序完全正確。一般來說,冒泡法是程序員最先接觸的排序方法,它的優點是原理簡單,編程實現容易,但它的缺點就是速度太慢。 2、快速排序代碼: #include<stdio.h> void quicksort(int a[],int left,int right) { int i,j,temp; i=left; j=right; temp=a[left]; if(left>right) return; while(i!=j) { while(a[j]>=temp&&j>i) j--; if(j>i) a[i++]=a[j]; while(a[i]<=temp&&j>i) i++; if(j>i) a[j--]=a[i]; } a[i]=temp; quicksort(a,left,i-1); quicksort(a,i+1,right); } void main() { int a[]={53,12,98,63,18,72,80,46,32,21}; int i; quicksort(a,0,9); /*排好序的結果*/ for(i=0;i<10;i++) printf("%4d\n",a[i]); } //快速排序的平均時間復雜度為O(nlgn)//最壞時間復雜度為O(n^2)//空間復雜度為O(logn), 遞歸造成的#include //快速排序的平均時間復雜度為O(nlgn) //最壞時間復雜度為O(n^2) //空間復雜度為O(logn), 遞歸造成的 #include <stdio.h> #include <stdlib.h> #include <assert.h> #define ARRAY_SIZE 10 int partitionArray(int* sortArray, int st, int end) { int i, j, temp; j = st+1; // j is from st+1 through end i = st; // i is the exact one before any elements larger than pivot for (;j<=end;j++) if (*(sortArray+j)<=*(sortArray+st)) { i++; if (i!=j) { temp = *(sortArray+i); *(sortArray+i) = *(sortArray+j); *(sortArray+j) = temp; } } temp = *(sortArray+i); *(sortArray+i) = *(sortArray+st); *(sortArray+st) = temp; return i; } void qSort(int* sortArray, int st, int end) { int pivot; if (st<end) { pivot = partitionArray(sortArray, st, end); qSort(sortArray, st, pivot-1); qSort(sortArray, pivot+1, end); } } int main() { int sortArray[ARRAY_SIZE]={30, 29, 45, 33, 21, 3, 108, 75, 99, 66}; int i; qSort(sortArray, 0, 9); for(i=0;i<10;i++) printf("%d ", sortArray[i]); printf("\n"); } 如果只是排序的話根本不用這么復雜 void main() { int a[] = {100,2,5,6,7,9,13,45,55}; int i,j; int t; for(i=0;i<8;i++){ for(j=i+1;j<=8;j++){ if(a[j]<a[i]){ t=a[i]; a[i]=a[j]; a[j]=t; } } } for(i=0;i<=8;i++){ printf("%4d",a[i]); } } 你的程序我看不懂誒。這是簡單的選擇排序可以試試看。6.誰能幫我寫一個快速排序的代碼
7.用C語言編寫一個快速排序算法 輸入10個數
8.求快速排序程序示例代碼
9.求快速排序程序示例代碼
10.幫我把這個快速排序的程序改簡潔點. 謝謝