上海龙凤419

C说话

C说话拔出排序算法及实例代码

时候:2024-07-02 15:51:44 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#include#define N 8void _sort(int a[],int n);//拔出排序完成,这里按从小到大排序void _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]) && (jj; k--) { a[k] = a[k-1]; } a[j] = temp; } }}int main(){ int num[N] = {89, 38, 11, 78, 96, 44, 19, 25}; _sort(num, N); for(int i=0; i<N; i++) printf("%d ", num[i]); printf("n"); system("pause"); return 0;}

  注重:拔出排序是一种不变的排序算法,不会转变原有序列中不异数字的挨次。

  拔出排序是在一个已有序的弁言列的根本上,一次拔出一个元素。固然,刚起头这个有序的弁言列只要1个元素,便是第一个元素。比拟是从有序序列的开端起头,也便是想要拔出的元素和已有序的最大者起头比起,若是比它大则间接拔出在厥前面,不然一向往前找直到找到它该拔出的地位。若是遇见一个和拔出元素相称的,那末拔出元素把想拔出的元素放在相称元素的前面。以是,相称元素的前后挨次不转变,从原无序序列进来的挨次便是排好序后的挨次,以是拔出排序是不变的。

【C说话拔出排序算法及实例代码】相干文章:

C说话挑选排序算法及实例代码11-25

C说话疾速排序实例代码06-04

C#完成协同过滤算法的实例代码11-30

10个典范的C说话口试根本算法及代码12-05

C说话以数据块的情势读写文件实例代码12-04

C说话完成合并排序算法实例04-01

C说话二分查找(半数查找)算法及代码11-16

桶排序算法的懂得及C说话版代码示例03-19

c说话中对于利用BF-KMP算法实例04-01