給定一整型數組,若數組中某個下標值大的元素值小於某個下標值比它小的元素值,稱這是一個反序,定一數組

來源:互聯網
上載者:User

給定一整型數組,若數組中某個下標值大的元素值小於某個下標值比它小的元素值,稱這是一個反序,定一數組

【問題】

找出反序的個數

給定一整型數組,若數組中某個下標值大的元素值小於某個下標值比它小的元素值,稱這是一個反序。 即:數組a[]; 對於i < j 且 a[i] > a[j],則稱這是一個反序。 給定一個數組,要求寫一個函數,計算出這個數組裡所有反序的個數。

【代碼】

#include <stdio.h>#include <stdlib.h>#include <string.h>int sumNum = 0;void merge(int *a, int *b, int begin, int mid, int end){int i, j, k = 0;i = begin;j = mid + 1;while (i <= mid && j <= end) {if (a[i] < a[j])b[k++] = a[i++];else {b[k++] = a[j++];sumNum += mid - i + 1;//計算反序對}}while (i <= mid)b[k++] = a[i++];while (j <= end)b[k++] = a[j++];for (i = 0; i < k; i ++)a[i + begin] = b[i];}void mergeSort(int *a, int *b, int begin, int end)//歸併排序,時間複雜度O(n*lgn)。{int mid = (begin + end) / 2;if (begin < end) {mergeSort(a, b, begin, mid);mergeSort(a, b, mid + 1, end);merge(a, b, begin, mid, end);}}int countReverse(int *a, int len) //遍曆尋找反序,時間複雜度O(n^2)。{int count = 0;int i, j;for (i = 0; i < len - 1; i ++)for (j = i + 1; j < len; j++)if(a[i] > a[j])count++;return count;}int main(void){int count;int a[] = {7, 4, 5, 3, 8, 6, 9, 10, 11};int len = sizeof(a) / sizeof(int);int *b;b = (int *)malloc(len * sizeof(int));count = countReverse(a, len);mergeSort(a, b, 0, len - 1);printf("%d\n", sumNum);printf("%d\n", count);free(b);return 0;}
【運行結果】




VB:怎返回vb一維數組某個元素所對應的下標的值?

最簡單的就是比較,找出這個元素的位置,然後輸出

array1 = Array(1, 2, 3, 4, 5)
For i = 0 To UBound(array1)
If array1(i) = 2 Then
Print i
Exit For
End If
Next i
參考資料:然後
 
C語言:找出數組中最大元素的位置(下標值)

#include<stdio.h>#include<math.h>int main(){ int n,a[10]; int i,max,loc; while((n=getchar())!=EOF) { for(i=0; i<n-'0'; i++) scanf("%d",&a[i]); max=a[0]; loc=0; for(i=1; i<n-'0'; i++) { if(a[i]>max) { max=a[i]; loc=i; } } printf("%d %d\n",max,loc); fflush(stdin); } return 0;}小小修改即可,scanf()!=EOF並不能達到你想要的目的 ,改成上面用getchar即可。
運行結果如下:

噢~~剛又研究了下scanf
例如:
scanf("%d,%d", &a, &b);  如果a和b都被成功讀入,那麼scanf的傳回值就是2  如果只有a被成功讀入,傳回值為1  如果a和b都未被成功讀入,傳回值為0  如果遇到錯誤或遇到end of file,傳回值為EOF。
scanf執行成功時返回的是參數數目。

所以你這個也行,改為下面這樣就行 運行結果一樣
#include<stdio.h>#include<math.h>int main(){ int n,a[10]; int i,max,loc; while(scanf("%d",&n)!=EOF) { for(i=0; i<n; i++) scanf("%d",&a[i]); max=a[0]; loc=0; for(i=1; i<n; i++) { if(a[i]>max) { max=a[i]; loc=i; } } printf("%d %d\n",max,loc); //fflush(stdin); } return 0;}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.