程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C 說話拔出排序算法及實例代碼

C 說話拔出排序算法及實例代碼

編輯:關於C++

C 說話拔出排序算法及實例代碼。本站提示廣大學習愛好者:(C 說話拔出排序算法及實例代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是C 說話拔出排序算法及實例代碼正文


拔出排序是排序算法的一種,它不轉變原本的序列(數組),而是創立一個新的序列,在新序列長進行操作。

這裡以從小到年夜排序為例停止講授。

根本思惟及舉例解釋

拔出排序的根本思惟是,將元素逐一添加到曾經排序好的數組中去,同時請求,拔出的元素必需在准確的地位,如許本來排序好的數組是依然有序的。

在現實應用中,平日是排序全部無序數組,所以把這個無序數組分為兩部門排序好的子數組和待拔出的元素。第一輪時,將第一個元素作為排序好的子數組,拔出第二個元素;第二輪,將前兩個元素作為排序好的數組,拔出第三個元素。以此類推,第i輪排序時,在前i個元素的子數組中拔出第i+1個元素。直到一切元素都參加排序好數組。

上面,以對 3  2  4  1 停止選擇排序解釋拔出進程,應用j記載元素須要拔出的地位。排序目的是使數組從小到年夜分列。

第1輪

[ 3 ]  [ 2  4  1 ]  (最後狀況,將第1個元素分為排序好的子數組,其他為待拔出元素)
[ 3 ]  [ 2  4  1 ]  (因為3>2,所以待拔出地位j=1)
[ 2  3 ]  [ 4  1 ]  (將2拔出到地位j)

第2輪

[ 2  3 ]  [ 4  1 ] (第1輪排序成果)
[ 2  3 ]  [ 4  1 ] (因為2<4,所以先假定j=2)
[ 2  3 ]  [ 4  1 ] (因為3<4,所以j=3)
[ 2  3  4 ]  [ 1 ] (因為4恰好在地位3,無需拔出)

第3輪

[ 2  3  4 ]  [ 1 ] (第2輪排序成果)
[ 2  3  4 ]  [ 1 ] (因為1<2,所以j=1)
[1  2  3  4 ]    (將1拔出地位j,待排序元素為空,排序停止)

算法總結及完成

選擇排序對年夜小為N的無序數組R[N]停止排序,停止N-1輪選擇進程。起首將第1個元素作為曾經排序好的子數組,然後將殘剩的N-1個元素,逐一拔出到曾經排序好子數組;。是以,在第 i輪排序時,前i個元素老是有序的,將第i+1個元素拔出到准確的地位。

#include<stdio.h>
#include<stdlib.h>
#define N 8
void insert_sort(int a[],int n);
//拔出排序完成,這裡按從小到年夜排序
void insert_sort(int a[],int n)//n為數組a的元素個數
{
 //停止N-1輪拔出進程
 for(int i=1; i<n; i++)
 {
  //起首找到元素a[i]須要拔出的地位
  int j=0;
  while( (a[j]<a[i]) && (j<i))
  {
   j++;
  }
  //將元素拔出到准確的地位
  if(i != j) //假如i==j,解釋a[i]恰好在准確的地位
  {
   int temp = a[i];
   for(int k = i; k > j; k--)
   {
    a[k] = a[k-1];
   }
   a[j] = temp;
  }
 }
}
int main()
{
 int num[N] = {89, 38, 11, 78, 96, 44, 19, 25};
 insert_sort(num, N);
 for(int i=0; i<N; i++)
  printf("%d ", num[i]);
 printf("\n");
 system("pause");
 return 0;
}

留意:拔出排序是一種穩固的排序算法,不會轉變原有序列中雷同數字的次序。

拔出排序是在一個曾經有序的弁言列的基本上,一次拔出一個元素。固然,剛開端這個有序的弁言列只要1個元素,就是第一個元素。比擬是從有序序列的末尾開端,也就是想要拔出的元素和曾經有序的最年夜者開端比起,假如比它年夜則直接拔出在厥後面,不然一向往前找直到找到它該拔出的地位。假如碰見一個和拔出元素相等的,那末拔出元素把想拔出的元素放在相等元素的前面。所以,相等元素的前後次序沒有轉變,從原無序序列出去的次序就是排好序後的次序,所以拔出排序是穩固的。

以上就是對拔出排序的具體引見,願望能贊助C說話開辟的同窗懂得控制拔出排序。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved