当前位置:编程学习 > C/C++ >>

几种常见的排序算法

[cpp] 
// 经典冒泡排序  
void BubbleSort(int arr[], int n)  
{  
    int i = 0, j =0;      
    for(i = 0; i < n; i++)  
        for(j = 0; j < n - 1 - i; j++)  
        {  
            if(arr[j] > arr[j + 1])  
            {  
                arr[j] = arr[j] ^ arr[j+1];  
                arr[j+1] = arr[j] ^ arr[j+1];  
                arr[j] = arr[j] ^ arr[j+1];  
            }              
        }      
}  
 
交换两个数据,可以用用临时变量,也可用以下的两个方法
a = a^b;
b = a^b;
a = a^b;
或者
a = a + b;
b = a - b;
a = a - b;
 
[cpp]  
// 选择排序  
void SelectSort(int arr[], int n)  
{  
    int i, j;  
    int min;  
      
    for(i = 0; i < n - 1; i++)  
    {  
        int index = 0;  
        min = arr[i];  
        for(j = i + 1; j < n; j++) //找出 i+1 - n 无序区的最小者与arr[i]交换  
        {  
            if(arr[j] < min)  
            {  
                min = arr[j];  
                index = j;       
            }    
        }  
        if(index != 0) //表明无序区有比arr[i]小的元素  
        {  
            arr[i] = arr[i]^arr[index];  
            arr[index] = arr[i]^arr[index];  
            arr[i] = arr[i]^arr[index];  
        }  
    }  
}  
感觉比冒泡法好多啦
[cpp]  
//快速排序算法  
void QuickSort(int arr[], int n)  
{  
    int i =0 , j = n - 1;  
    int key = arr[0];  
    int index = 0;  
      
    if(n <= 1)  
        return;      
      
    while(i < j)  
    {  
        // 从后向前搜索  
        while(j > i && arr[j] > key)  
            j--;  
        if(j == i)  
            break;  
        else  
        {  
            arr[i++] = arr[j];  
            index = j;  
        }  
          
        // 从前向后搜索  
        while(i < j && arr[i] <key)  
            i++;  
        if(i == j)  
            break;  
        else  
        {  
            arr[j--] = arr[i];  
            index = i;  
        }              
    }      
    QuickSort(arr, index);  
    QuickSort(arr + index + 1, n - 1 - index);  
}  
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,