<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      排序

      1. 在多個數據元素(Ri)的序列,其中每個元素有相應的關鍵字(Ki)(也叫元素的屬性),通過關鍵字的固有關系來對對應數據元素進行排序

      2. 排序穩定性:元素R1 R2 的關鍵字K1 K2相同,排序前R1在R2前面,排序后 R1在R2前面,則該排序方法是穩定的。

      3. 多關鍵字排序:排序先用最高優先級的關鍵字N1進行排序,,當N1關鍵字相同時使用N2優先級關鍵字進行排序,如果關鍵字還是相同依次使用N2,,Nn-1

      4. 排序和交換兩個重要手段

      5. 排序選擇要素:時間性能,空間性能,程序復雜度

       

      1.選擇排序

        思想:在排序到當前序列第 i 和元素時,從后面 n-i 個元素中選出最小元素,作為當前排序序列第 i 個元素。 

             

       

       

        code:

              static void select(T array[], int len)
              {
                  for(int x = 0; x < len; x++)
                  {
                      int min = x; 
                      for(int y = x + 1; y < len; y++)
                      {
                          if(array[min] > array[y]) //升序< 降序>
                              min = y;
                      }
                      if(min != x)
                          swap(array[x],array[min]); //不穩定排序
                  }

       

        

      2.插入排序

        思想:序列分為有序序列和無需序列。未排序序列選擇第 i (1) 位的元素時,插入到前面的有序序列,使用 i 元素的關鍵字與前 i-1 個元素關鍵字進行比較,找到位置后插入即可   

              

       

       

              template <typename T>
              static void insert_sort(T array[], int len, bool ascend = false)
              {
                  for(int x = 1; x < len; x++)
                  {
                      int z = x;
                      T temp = array[z];
                      for(int y = x - 1; (y >= 0) && (ascend ? array[y] > temp: array[y] < temp); y--)
                      {
                          array[y + 1] = array[y]; //穩定排序
                          z = y;
                      }
                      if(z != x)
                      {
                          array[z] = temp;
                      }
                  }
              }

       

       

      3.冒泡排序

        思想:序列分為有序序列和無序序列,從整個序列的最后一個元素開始向前依次比較大小,小則比較數前移,大則用被比較的元素前移。

              

       

       

      template <typename T>
              static void bubble_sort(T array[], int len, bool ascend = false)
              {
                  bool state = ture;
                  for(int x = 0; x < len && state; x++) //某個元素無法前的元素都是有序的,表明有序
                  {
                      state = false;
                      for(int y = len - 1; y > x; y--)
                      {
                          if(ascend ? array[y] > array[y - 1] : array[y] < array[y - 1])
                          {
                              swap(array[y],array[y - 1]);
                              state = ture; 
                          }
                      }
                  }
              }

       

       

      4.希爾排序

        思想:將n個元素的序列分為d組,每一組使用插入排序。然后再分為d-1組,再分別排序。直到d=1。

        如何分組: 將n個元素分為d個子序列:第一組:{R[1],R[1+d],R[1+2d]...R[1+kd]} 第二組:{R[2],R[2+d],R[2+2d]....R[2+kd]} .........第d組:{R[d],R[2d],R[3d]...R[(1+k)d]} 。

              

       

       

              template <typename T>
              static void shell_sort(T array[], int len, bool ascend = false)
              {
                  int d = len;
                  do
                  {
                      d = d / 3 + 1; //???
                      for(int x = d ; x < len; x += d)
                      {
                          int z = x;
                          T temp = array[z];
                          for(int y = x - d; (y >= 0) && (ascend ? array[y] > temp: array[y] < temp); y -= d)
                          {
                              array[y + d] = array[y]; //穩定排序
                              z = y;
                          }
                          if(z != x)
                          {
                              array[z] = temp;
                          }
                      }
                  }
                  while(d > 1);
              }

       

       

       

      5.歸并排序

        思想:先將一個無序序列劃分為兩個無序序列,再將兩個無序序列接著向下劃分,直到每個子序列只包含一個元素此時每個子序列都是有序序列,

                       再兩個兩個子序列比較后合并,直到所有子序列合并為原來的序列,此時序列變為有序。

           幾個有序序列歸并就叫幾路歸并。

                  穩定但是花費空間

                       

       

       

          template <typename T>
              static void merge_sort(T array[], int len, bool ascned = ture)
              {
                  T* temp_array = new T[len];
                  merge_sort_core(array, temp_array, 0, len - 1, ture);
                  delete[] temp_array;
              }
      
              template <typename T>
              static void merge_sort_core(T array[], T temp_array[], int begin, int end, bool ascned = ture)
              {
                  if(begin == end)
                  {
                      return;
                  }
                  else
                  {
                // 分割
      int mid = (begin + end) / 2; merge_sort_core(array, temp_array, begin, mid, ascned); merge_sort_core(array, temp_array, mid + 1, end, ascned); // 合并 int x = begin, y = mid + 1, z = begin; while(x <= mid && y <= end) { if(array[x] < array[y]) { temp_array[z++] = array[x++]; } else { temp_array[z++] = array[y++]; } } while(x <= mid) { temp_array[z++] = array[x++]; } while(y <= end) { temp_array[z++] = array[y++]; } for(z = begin; z <= end; z++) { array[z] = temp_array[z]; } } }

       

       

      6.快速排序

       思想: 通過在序列中選擇一個基準值對一個無序序列劃分,將無序序列大于基準值的放在左邊,小于基準值的放在右邊。再把左右兩個子序列繼續尋找基準值繼續劃分下去。

          最后每個序列都只有一個元素,而此時整個序列變成有序的。

                     不穩定但是花費空間

                     

       

       

              template <typename T>
              static void quick_sort(T array[], int len, bool ascned = ture)
              {
                  quick_sort_core(array, 0, len - 1, ascned);
              }
      
              template <typename T>
              static void quick_sort_core(T array[], int begin, int end, bool ascned = ture)
              {
                  //確定基準值的位置
                  int base_pos = 0, base_value = array[begin], begin_slide = begin, end_slide = end;
                  while(begin_slide < end_slide)
                  {
                      while(begin_slide < end_slide && ascned ? base_value  < array[end_slide] : base_value  > array[end_slide])
                      {
                          --end_slide;
                      }
                      swap(array[begin_slide], array[end_slide]);
                      while(begin_slide < end_slide && ascned ? base_value >= array[begin_slide] : base_value <= array[begin_slide])
                      {
                          ++begin_slide;
                      }
                      swap(array[begin_slide], array[end_slide]);
                  }
                  array[begin_slide] = base_value;
                  base_pos = begin_slide;
                  //繼續劃分
                  quick_sort_core(array, begin, (base_pos - 1), ascned);
                  quick_sort_core(array, base_pos + 1, end, ascned);
              }

       

      posted @ 2020-02-29 19:07  張不源  Views(270)  Comments(0)    收藏  舉報
      主站蜘蛛池模板: 国产乱妇乱子视频在播放| 亚洲国产在一区二区三区| 国产精品高清一区二区三区| 国产精品日日摸夜夜添夜夜添无码| 久久精品人人做人人爽电影蜜月| 亚洲无人区一区二区三区| 日韩精品国产中文字幕| 欧洲人妻丰满av无码久久不卡| 国产人妻大战黑人20p| 亚洲综合在线日韩av| 青铜峡市| 亚洲欧美人成人综合在线播放| 国产精品色内内在线播放| 精品亚洲国产成人av| 内射老阿姨1区2区3区4区| 国产WW久久久久久久久久| 亚洲人成人网站色www| 国产一区二区三区免费观看| 少妇被爽到高潮喷水久久欧美精品| 国产精品蜜臀av在线一区| 亚洲av无码精品色午夜蛋壳| 99久久精品国产免费看| 国产日韩乱码精品一区二区| 丁香婷婷色综合激情五月| 亚洲av日韩av永久无码电影| 四虎在线成人免费观看| 日本亚洲一区二区精品| 国产日韩av免费无码一区二区三区| 久久精品99国产精品日本| 2020国产欧洲精品网站| 一区二区在线观看 激情| 午夜成人无码免费看网站| 亚洲人成色77777在线观看 | 强伦人妻一区二区三区| 18禁无遮挡啪啪无码网站破解版| 荃湾区| 在线视频一区二区三区色| 亚洲AV日韩AV永久无码下载| 四虎永久精品免费视频| 97久久精品人人澡人人爽| 免费国产一级特黄aa大片在线|