快速排序算法和冒泡排序

快速排序採用的是分治法,其平均時間複雜度爲O(nlogn)

一趟快速排序的算法是[1]:

  1)設置兩個變量I、J,排序開始的時候:I=0,J=N-1;
  2)以第一個數組元素作爲關鍵數據,賦值給key,即 key=A[0];
  3)從J開始向前搜索,即由後開始向前搜索(J=J-1即J--),找到第一個小於key的值A[j],A[j]與A[i]交換;
  4)從I開始向後搜索,即由前開始向後搜索(I=I+1即I++),找到第一個大於key的A[i],A[i]與A[j]交換;

  5)重複第3、4、5步,直到 I=J; (3,4步是在程序中沒找到時候j=j-1,i=i+1,直至找到爲止。找到並交換的時候i, j指針位置不變。另外當i=j這過程一定正好是i+或j-完成的最後另循環結束。)

下面是快速排序的代碼:

[cpp] view plaincopyprint?

  1. #include <iostream> 
  2.  
  3. using namespace std; 
  4.  
  5. int a[] = {100,8,15 ,37,26,13,27,49,55,14}; 
  6.  
  7. void quick_sort(int a[], int left, int right) 
  8.     if(left<right) 
  9.     { 
  10.     int i = left; 
  11.     int j = right; 
  12.     int x = a[i]; 
  13.  
  14.     while(i<j) 
  15.     { 
  16.         while(i<j&&a[j]>x) 
  17.             j--; 
  18.         if(i<j){ 
  19.             a[i] = a[j]; 
  20.             i++; 
  21.         } 
  22.         while(i<j&&a[i]<x) 
  23.             i++; 
  24.         if(i<j){ 
  25.          a[j] = a[i]; 
  26.          j--; 
  27.         } 
  28.     } 
  29.     a[i] = x; 
  30.     quick_sort(a, left, i-1); 
  31.     quick_sort(a, i+1, right); 
  32.     } 
  33. int main() 
  34.     cout<<"Before sort: "
  35.     for(int i =0 ; i<10;i++) 
  36.         cout<<a[i]<<" "
  37.     cout<<endl; 
  38.     quick_sort(a, 0, 9); 
  39.     cout<<"After sort: "
  40.     for(int i =0 ; i<10;i++) 
  41.         cout<<a[i]<<" "
  42.     cout<<endl; 

 

冒泡排序

 

 

14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
#define SIZE 8
void bubble_sort(int a[], int n);
void bubble_sort(int a[], int n)
{
    int i, j, temp;
    for (j = 0; j < n - 1; j++)
        for (i = 0; i < n - 1 - j; i++)
        {
            if(a[i] > a[i + 1])
            {
                temp = a[i];
                a[i] = a[i + 1];
                a[i + 1] = temp;
            }
        }
}
int main()
{
    int number[SIZE] = {95, 45, 15, 78, 84, 51, 24, 12};
    int i;
    bubble_sort(number, SIZE);
    for (i = 0; i < SIZE; i++)
    {
        printf("%d", number[i]);
    }
    printf("\n");

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章