冒泡选择插入排序


排序
术语
稳定: a 原本在b的前边,a = b , 排序后 a 还在b的前边 不稳定:a 原本在b的前边,a = b , 排序后 a可能会出现b的后边 内排序 所有排序操作都是在内存完成的 外排序 数据太大,需要给数据存到磁盘,通过数据传输,进行排序 时间复杂度:程序运行的时间,一个算法中,语句的执行次数, T(n) n 数据的规模, T(n) = n^2 + 2*n + c 大O阶表示 取 最高次数 常见的复杂度: O(1) O(n) O(logn) O(n^2) O(n^3)...... O(n^k) 空间复杂度 程序运行所花费的空间。
冒泡排序
依次比较相邻的两个元素, 如果 a[i] > a[i+1] 需要交换,
执行n-1 上边操作 #include <iostream> #include <algorithm> using namespace std;

int main() { 

    int a[105];

     int n;

     cin >> n; 

    for(int i = 0 ; i < n ; ++i) {  

       cin >> a[i]; 

    }     

/*冒泡排序*/    

扫描二维码关注公众号,回复: 2203191 查看本文章

 for(int i = 0; i < n -1 ; ++i) {  

       for(int j = 0; j < n-1-i; ++j) { 

            if(a[j]>a[j+1]) 

                swap(a[j],a[j+1]); 

        }     }  

   for(int i = 0 ;i < n ; ++i) {  

       cout << a[i] << " ";  

   }     return 0; }

选择排序
依次寻找第i小元素,让它与第i个元素交换位置
执行 n - 1 次 #include <iostream> #include <algorithm> using namespace std;

int main() { 

    int a[105];     int n;     cin >> n; 

    for(int i = 0 ; i < n ; ++i) { 

        cin >> a[i];

     }     /*选择排序*/ 

    for(int i = 0 ; i < n-1){ 

        int pos = i;

         for(int j = i+1; j < n; ++j) {

             if(a[j]<a[pos])

                 pos = j;

         }

         swap(a[i],a[pos]); 

    }      

for(int i = 0 ;i < n ; ++i) {  

       cout << a[i] << " ";    

 }     

return 0; }

插入排序
第一个元素是有序
依次取出下一个元素,在前边已经有序的序列里,把它放在合适的位置 #include <iostream> #include <algorithm> using namespace std;

int main() {

     int a[105]; 

    int n; 

    cin >> n;

     for(int i = 0 ; i < n ; ++i) { 

        cin >> a[i]; 

    }  

   /*插入排序*/ 

    for(int i = 1; i < n; ++i) { 

        int key = a[i]; 

        int j = i - 1;

// [0,j] 区间是有序的

         while(j>=0&&key<a[j]){   

          a[j+1] = a[j];

          j--; 

        }  

       a[j + 1] = key;   

  } 

    for(int i = 0 ;i < n ; ++i) {  

       cout << a[i] << " ";  

   }     

return 0; }

快速排序
堆排

猜你喜欢

转载自blog.csdn.net/wwwkm123/article/details/81023662
今日推荐