数据结构 排序1 交换排序
2009-07-24 17:37
246 查看
1.交换排序的基本思想是:两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。
a:冒泡排序:依次抽出所有数和为排出顺序数据进行比较,小的往一个方向靠,其余数留下。如( 3,5,4,2,1,)。首先从最末尾寻找,找到这当中最小的,放到第0个位置,然后又继续从最末尾开始寻找第二个最小的数方到的1个位置,依此类推就找出整个排序。他有个好处就是可以放一个开关,用来判断数据是否按设定的顺序以及排号了,详细看源代码。
b:快速排序:快速排序是这当中速度最快的,用处最广泛的。其办法是通过与一个关键字比较,大的站右边,小的站左边,关键字来站中间。(^-^)(站住,举起手来,我是警察,男的站左边,女的站右边,嗯……………..老师它站那里,呵呵,变态的站中间!) (^-^)。然后依此类推,直到剩下两个数,比出他们高矮后就完事了。
快速排序的三部曲:
分解( Divide ):将原问题分成两半,一边大一边小。
求解( Conquer ):小的有分大和小两边,大的那边同理。递归完个组。
组合( Combine ):将排号高矮的连成一排就是结果了。
详细步骤看代码:
a:冒泡排序:依次抽出所有数和为排出顺序数据进行比较,小的往一个方向靠,其余数留下。如( 3,5,4,2,1,)。首先从最末尾寻找,找到这当中最小的,放到第0个位置,然后又继续从最末尾开始寻找第二个最小的数方到的1个位置,依此类推就找出整个排序。他有个好处就是可以放一个开关,用来判断数据是否按设定的顺序以及排号了,详细看源代码。
#include <stdio.h> #include <stdlib.h> #define NUM 6 //冒泡算法 int BubbleSort( int a[], int n ) { int i, j, t; bool bOK = false; for( i = 0; i < n - 1; i++ ) { bOK = false; for( j = n - 1; j > i; j-- ) { if( a[j] < a[ j-1 ] ) { t = a[j]; a[j] = a[j-1]; a[j-1] = t; bOK = true; //如果后面的数都按从小到大排序好了, //那么就不会进入此开关,后面就可以立即结束循环。 } } if( !bOK ) return 1; } return 1; } int main( void ) { int a[NUM] = { 5, 3, 6, 7, 2, 2 }; int i; //排序算法 BubbleSort( a, NUM ); for( i = 0; i < NUM; i++ ) { printf( "%d ", a[ i ] ); printf( "/n" ); } return 0; }
b:快速排序:快速排序是这当中速度最快的,用处最广泛的。其办法是通过与一个关键字比较,大的站右边,小的站左边,关键字来站中间。(^-^)(站住,举起手来,我是警察,男的站左边,女的站右边,嗯……………..老师它站那里,呵呵,变态的站中间!) (^-^)。然后依此类推,直到剩下两个数,比出他们高矮后就完事了。
快速排序的三部曲:
分解( Divide ):将原问题分成两半,一边大一边小。
求解( Conquer ):小的有分大和小两边,大的那边同理。递归完个组。
组合( Combine ):将排号高矮的连成一排就是结果了。
详细步骤看代码:
#include <stdio.h> #include <stdlib.h> #define NUM 100 //以a[beg]为标杆,比该数小的站左边,比该数大的 //站右边,然后返回标杆所处的位置。 int PartNode( int a[], int beg, int end ) { int i, t, s, key; key = a[beg]; s = end; for( i = end - 1; i > beg; i-- ) { if( key < a[i] ) //比标杆长的统统往右移,与比标杆小的交换位置 { s--; t = a[i]; a[i] = a[s]; a[s] = t; } } s--; t = a[s]; a[s] = a[beg]; a[beg] = t; return s; } //快速排序 int QuickSort( int a[], int beg, int end ) { if( beg >= end - 1 ) return 1; int i = 0; i = PartNode( a, beg, end ); QuickSort( a, beg, i ); //排列比标杆矮的数据。 QuickSort( a, i+1, end ); //排列比标杆高的数据 return 1; } int main( void ) { //int a[NUM] = { 5, 3, 6, 7, 2, 2 }; int i; int a[NUM]; for( i = 0; i < NUM; i++ ) { a[i] = rand() % NUM; } //排序算法 QuickSort( a, 0, NUM ); for( i = 0; i < NUM; i++ ) { printf( "%d ", a[ i ] ); printf( "/n" ); } return 0; }
相关文章推荐
- 数据结构例程——交换排序之冒泡排序
- 数据结构之单向链表操作1-(插入,删除,交换,反转,排序等操作)
- 数据结构-排序: 交换排序(冒泡排序法)
- 数据结构学习系类列十三-交换排序
- C++代码,数据结构-内部排序-交换排序-起泡排序
- 数据结构例程—— 交换排序之快速排序
- 数据结构复习-交换排序
- 数据结构-排序: 交换排序(快速排序法)
- C++代码,数据结构-内部排序-交换排序-快速排序
- 数据结构-交换排序-冒泡排序
- 算法与数据结构之交换(SWAP)排序
- 图解"数据结构--内部排序算法"----交换排序:冒泡排序、快速排序
- 【数据结构】:排序--交换排序
- 数据结构-排序: 交换排序(快速排序法)
- 数据结构-排序算法之交换排序(冒泡排序快速排序)
- 数据结构 排序 交换排序
- 数据结构之交换排序之快速排序(参考整理严蔚敏数据结构)
- 【数据结构】对一个数组按给定的下标排序,仅使用两两交换的方式,要求不能对数组进行扩容尽可能使用额外少的空间
- 【数据结构】排序算法(二)之交换排序之快速排序(QuickSort)
- 数据结构排序-交换排序-快速排序