深度冒泡排序(元素从小到大排序)
例如:arr[ ]里的元素为 9 5 6 8 4 3 1 7 2
在第一次排序时,先比较前两个元素的大小,如果第一个元素大于第二个元素则两个交换,继续比较第二个和第三个。以此类推,当倒数第二个和最后一个比较完就把最大的那个元素交换到了最后一位(最多交换了n-1次)
当把最大的交换到最后一位后,接下来就要把次高位的元素放大倒数第二位了。和前面一样只需要比较相邻元素,把大的交换到后面就行了。当比较完倒数第三位和倒数第二位时,就不用再比较后面两位了(最后一位已经放的是最大数了) ,所以总共比较了n-2次
可以发现排一次序,相邻元素就会少比较一次,一直到只剩下第一位和第二位比较的时候,整个排序结束。所以总共排了N-1次序。
接下来到代码中来实现!
- #include <windows.h>
- #include <stdio.h>
- int main()
- {
- int arr[] = {9,5,6,8,4,3,1,7,2};
- int i = 0;
- int j = 0;
- int sz = sizeof(arr)/sizeof(arr[0]); //数组的大小
- for(i=0; i<sz-1; i++) //外循环判断排序的次数
- {
- for(j=0; j<sz-1-i; j++) //内循环判断相邻元素交换的次数
- {
- if(arr[j]>arr[j+1])
- {
- int tmp = arr[j];
- arr[j] = arr[j+1];
- arr[j+1] = tmp;
- }
- }
- }
- for(i=0; i<sz; i++)
- {
- printf("%d ",arr[i]);
- }
- printf("\n");
- system("pause");
- return 0;
- }